转载:const放在函数前后的区别

一、const修饰指针

int b = 500;

1、const int * a = & b;

2、int const * a = & b;

3、int * const a = & b;

4、const int * const a = & b;

对于1和2

const 放在*左侧,就是用来修饰指针所指向的变量,即指针指向的是常量。

若a是仓库管理员,b是仓库。即仓库中的货物(*a)不允许改变。但是可修改指针指向或b的值来改变*a。

对于3

const放在*的右侧,表示管理的仓库不可改变,只能是那一个,但是仓库中的货物(*a)可以改变。同时定义时必须初始化。

对于4

表示指针本身和指向的内容均为常量。

二、放在函数前后区别

1、int GetY() const;

2、const int * GetPosition();

对于1

该函数为只读函数,不允许修改其中的数据成员的值。

对于2

修饰的是返回值,表示返回的是指针所指向值是常量。

三、深入理解const

const对象只能调用const成员函数;const对象的值不能被修改,在const成员函数中修改const对象数据成员的值是语法错误;在const函数中调用非const成员函数是语法错误。

在一个类的函数后面加上const后,就表明这个函数是不能改变类的成员变量。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。
以下程序中,类stack的成员函数GetCount仅用于计数,从逻辑上讲GetCount应当为const函数。编译器将指出GetCount函数中的错误。
class Stack
{
  public:
void  Push(int elem);
int  Pop(void);
int GetCount(void)  const; // const成员函数
  private:
int m_num;
int m_data[100];
};
int Stack::GetCount(void)  const
{
++ m_num; // 编译错误,企图修改数据成员m_num
Pop(); // 编译错误,企图调用非const函数
return m_num;
}
const成员函数的声明看起来怪怪的:const关键字只能放在函数声明的尾部,大概是因为其它地方都已经被占用了。

--------------------- 本文来自 ranyongqing 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/ranyongqing/article/details/25594795?utm_source=copy
————————————————
版权声明:本文为CSDN博主「wangtingze123」的原创文章,遵循CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wangtingze123/article/details/82867173

const放在函数前后的区别的更多相关文章

  1. const 放在函数后

    const 放在函数后表示这个函数是常成员函数, 常成员函数是不能改变成员变量值的函数.const 限定符,它把一个对象转换成一个常量.举例:为了使成员函数的意义更加清楚,我们可在不改变对象的成员函数 ...

  2. const放在函数前和函数后

    class c { public: returnType functionName (parameter list) const; //这个函数不会修改类成员 const returnType fun ...

  3. const放在函数前和放在函数后

    template < class T, class container = vector<T> > class MyClass{ private: T value; publi ...

  4. C++ 基础 const放在函数末尾的意思

  5. const 修饰函数

    At the very first ,I got a problem . Vector Vector::operator+(const Vector &v)const{ return Vect ...

  6. c++ 学习之const专题之const成员函数

    一些成员函数改变对象,一些成员函数不改变对象. 例如: int Point::GetY() { return yVal; } 这个函数被调用时,不改变Point对象,而下面的函数改变Point对象: ...

  7. C++ Const成员函数

    一些成员函数改变对象,一些成员函数不改变对象. 例如:  int Point::GetY() { return yVal; }  这个函数被调用时,不改变Point对象,而下面的函数改变Point对象 ...

  8. C++中const在函数中的用法

    1.const放在函数前面 如果我们的函数的返回值是以 指针形式 返回的,如果在函数前面加上const修饰,则表示指针指向的内容是不能被改变的,并且接收返回值的 指针变量必须是const修饰的,例如: ...

  9. (转)函数后面加const--C++ const成员函数

    类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变. 在设计类的时候,一个原则就是对于不改变数据成员的成员函数都要在后面加 const,而对于 ...

随机推荐

  1. 【MarkDown】github readme添加图片 Markdown语法添加图片,适用各种markdown语法

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985, QQ986945193 微博:http://weibo.com/mcxiaobing 首先给大家看一 ...

  2. C# .NET容器的源码

    这里有List<T>的源码http://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs

  3. 读Twinsen的深入探索透视投影变换

    2017.10.16更新,分割线下面是以前的文字,有表达的意思,却言不达意,实属羞耻,看官只需看前面文字即可. Twinsen大神的<深入探索透视投影变换>有几个点说得不够清晰,我这里提一 ...

  4. 如何配置node环境变量

    1,安装node.js   最后安装的目录在 检测node安装成功   node -v 如果报错   没有默认装在c盘  pro 需要配置环境变量 Npm   node  package  manag ...

  5. 学会BeanShell,才敢说自己懂Jmeter

    jmeter的BeanShell Sampler,可以直接引用java代码,有下面3种方式: 1.直接输入java代码 2.导入java文件 3.导入class文件 BeanShell脚本访问变量主要 ...

  6. 04_Python中的35个关键字

    查看Python中的关键字 import keyword print(keyword.kwlist)  # 返回一个包含Python关键字的列表     """执行结果 ...

  7. 设置logback的log文件地址为程序运行的当前目录

    这个需求虽然怪异,却也不是无事生非,在以jar包为执行主体的程序中就会遇到. 设置方法就是指定Log_HOME为./,其在如下配置文件的第四行: <?xml version="1.0& ...

  8. 配置Cassandra开机启动(CentOS 7)

    配置环境:centOS 7 1. 编写开机启动脚本[root@cassandra-01 ~]# cd /etc/rc.d/init.d/[root@cassandra-01 init.d]# vi c ...

  9. pwnable.kr之bof

    打开题目: 先下载题目给我们的两个文件,查看文件信息: 发现没有执行的权限,所以先增加文件bof的执行权限,执行: 没发现啥,然后查看代码, #include <stdio.h> #inc ...

  10. python基础 格式化输出

    格式化输出 '%s %d %.2f' % ('Novak', 33, 1.88) 需要逗号