1.const修饰变量。值不能改变
const int param= 6; //值不能改变
param= 7;//编译错误,assignment of read-only variable ‘param’
2.const修饰指针
a. int num[] ={1,2,3,4,5};
const int* param=num;
const 在指针前面,表示指向常量的指针,指针值可以改变(指向其他常量),但是指针指向的值不能变化,常用在参数传递。
*param=2;//error,assignment of read-only variable ‘param’
param++;//正确
b.int* const param=num;
const在指针后面,变量前面,表示指针常量,指针值 不能改变(不能指向其他常量),但是指针指向的值可以改变。
*param =2;//正确
param++;//error, increment of read-only variable ‘param’
3.const在函数后缀
const放在成员函数作为后缀,method() const,表示不能修改任何类的成员变量值,否则,编译器报错。
若要修改某个变量的值,必须声明为mutable
如:
class CConstTest
{
public:
CConstTest(int x=0,int y=1) {m_x = x;m_y=y;m_z=0;}
~CConstTest() {}
int GetX() const {
m_z++; //error
m_y++; //ok
return m_x;
}
int GetY() const {return m_y;}
private:
int m_x;
mutable int m_y;
int m_z;
};
4.const修饰返回值
const int *const method(const int *const ¶m) const; 1 2 3 4 5
解析:该函数编译中有如下错误。
non-member function ‘const int* const method(const int*)’ cannot have cv-qualifier
去掉函数尾部的const 编译正常。
什么是cannot have cv-qualifier?不能有CV限定符,在C++中CV限定符指const和volatile。
在C++中,普通函数(非类的成员函数)不能有CV限定,即const和volatile限定。
在C++中,静态成员函数(static成员函数)不能有CV限定,即const和volatile限定。
函数下面的数字1和2,表示返回指向常量的指针,不能修改指针指向的内容,可以改变指针值。
const int *const 和 const int * 和 int *const 三种情况等同。
函数下面的数字3和4,表示不能改变param的指针值和指的内容值。
函数下面的数字5(类的成员函数),表示不能修改类的任何成员变量(mutable除外)