人生是如此精彩,今天学习是为了明天绽放
const 放在函数前面和后面的区别
我们常常会遇到这样的代码
const int& funs() const
总结:
第一个const 代表该函数的返回值无法被改变。
第二个const代表该函数不会对调用者(如classA a;a->funs()中的a对象)内部成员进行更改。
(一)前面放const
举例,头文件
class MyClass
{
public:
MyClass();
public:
const int& Funs (const int tmp_b) //这里将参数传递给a成员变量
{
this->a = tmp_b;
return tmp_b;
}
int a;
};
尝试调用
MyClass *temp_MyClass = new MyClass();
temp_MyClass->a = 10; //给a赋值
temp_MyClass->Funs(20); //调用该函数刷新a的值
printf("%d\n",temp_MyClass->a); //打印a为20
在函数前面加const作用,调用下面这样的会报错。
int ret = temp_MyClass->Funs(20) = 1; //假设有人会这样做2333
//最有可能是这样做
if(temp_MyClass->Funs(20) = 1) //由于程序员疏忽大意,将==写成=了
{
}
程序编译不通过
提示不可更改。
(二)在后面加const
当我在函数后面添加const的时候
const int &Funs (const int tmp_b) const
{
this->a = tmp_b; //该句报错,提示const修饰的无法改变调用者
//本身
return this->a;
}