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指针,里面的成员不能够修改。