我们定义的类的成员函数中,常常有一些成员函数不改变类的数据成员,也就是说,这些函数是"只读"函数,而有一些函数要修改类数据成员的值。如果把不改变数据成员的函数都加上const关键字进行标识,显然,可提高程序的可读性。
其实,它还能提高程序的可靠性,已定义成const的成员函数,一旦企图修改数据成员的值,则编译器按错误处理。
c++ 函数前面和后面 使用const 的作用:
前面使用const 表示返回值为const
后面加 const表示函数不可以修改class的成员 (仅为可读,不可写入)
请看这两个函数
const int getValue();
int getValue2() const;
头文件定义
/* * FunctionConst.h */ #ifndef FUNCTIONCONST_H_ #define FUNCTIONCONST_H_ class FunctionConst { public: int value; FunctionConst(); virtual ~FunctionConst(); const int getValue(); int getValue2() const; }; #endif /* FUNCTIONCONST_H_ */
源文件实现
/* * FunctionConst.cpp */ #include "FunctionConst.h" FunctionConst::FunctionConst():value(100) { // TODO Auto-generated constructor stub } FunctionConst::~FunctionConst() { // TODO Auto-generated destructor stub } const int FunctionConst::getValue(){ return value;//返回值是 const, 使用指针时很有用. } int FunctionConst::getValue2() const{ //此函数不能修改class FunctionConst的成员属性 value value = 15;//错误的, 因为函数后面加 const return value; }
参考 https://stackoverflow.com/questions/2157458/using-const-in-classs-functions
what is the real definition and use of const ?
A const method can be called on a const object:
class CL2 { public: void const_method() const; void method(); private: int x; }; const CL2 co; CL2 o; co.const_method(); // legal co.method(); // illegal, can't call regular method on const object o.const_method(); // legal, can call const method on a regulard object o.method(); // legal
Furthermore, it also tells the compiler that the const method should not be changing the state of the object and will catch those problems:
void CL2::const_method() const { x = 3; // illegal, can't modify a member in a const object }
There is an exception to the above rule by using the mutable modifier, but you should first get good at const correctness before you venture into that territory.