const func():表示函数的返回值不会修改;
func() const:表示函数(类)成员不能修改。
举例说明:
1、const在函数前面:
当func前无const时:
class MyClass
{
public:
int a;
int& func(const int& val) //这里将参数传递给a成员变量
{
this->a = val;
return a;
}
};
int main()
{
int val;
MyClass *myClass = new MyClass();
myClass->a = 10;
val = myClass->func(20);
cout << "val:" << val <<endl;
cout <<"myClass->a:" << myClass->a << endl;
myClass->func(20) = 5;
cout <<"myClass->a:" << myClass->a << endl;
return 1;
}
运行代码返回结果:
val:20
myClass->a:20
myClass->a:5
可以看到myClass->func(20) = 5这句把类成员a的值改变了。
当func前有const时:
class MyClass
{
public:
int a;
const int& func(const int& val) //这里将参数传递给a成员变量
{
this->a = val;
return a;
}
};
int main()
{
int val;
MyClass *myClass = new MyClass();
myClass->a = 10;
val = myClass->func(20);
cout << "val:" << val <<endl;
cout <<"myClass->a:" << myClass->a << endl;
//myClass->func(20) = 5; //有这句话会编译不过
cout <<"myClass->a:" << myClass->a << endl;
return 1;
}
myClass->func(20) = 5这句需要屏蔽掉,否则会编译不过,更不会修改类成员a的值。
这样可以有效避免把if(myClass->func(20) ==1)写成if(myClass->func(20) =1)。编译器会直接告诉你语法错误。
2、const在函数后面:
class MyClass
{
public:
int a;
int& func(const int& val) const //这里将参数传递给a成员变量
{
this->a = val; //编译会报错
return a;
}
};
类定义会编译报错,const修饰的时this指针,里面的成员不能够修改。
|