没事翻了下C++ primer,开卷有益吧,加深下印象,留个复习记录如下:
1、const 指针与指向 const对象的指针
const int * p;/*指向const int 的指针*/
int * const p;/*指向int的const指针*/
记忆方法:从右往左读,*读作is a pointer to。
2、const形参
在非引用或非指针传值时,const修饰符无意义,因为复制传值的时候,不可能改变实参的值。
const int &与int &不同,此处不同可作为区分函数重载的标识。
没有int const &(这点与指针不同,指针分常指针与指向常变量的指针等),引用初始化的时候就已经赋值,不能像指针一样改变指向的对象,引用只是一个别名。
const int *与int * const 参考第一点。
3、const函数。
const函数不能改变类成员变量的值,除非该成员变量被mutable修饰,这是因为const 函数所传递的指针是指向const 对象的指针。
4、const对象
const对象在初始化之后就不能修改类对象的成员,const对象在初始化之后只能调用const成员函数。
5、const成员函数
const成员函数不能修改对象中的任何成员(静态成员除外),但是此函数若改变成员变量指针指向的对象的值,编译器无法发觉并提出警告,这点要特别注意。(编译器仅仅检测类中对象是否被修改,而没有检测指针指向的对象,改变成员指针指向对象的值这点不符合const成员函数的定义,但编译器无法发觉。)
6、
指向const的指针不能改变非const对象的值(编译器会报错),指向const的指针可以理解为“自以为指向const对象的指针”,不能通过指向const对象的指针来修改对象,但是通过其他途径来修改对象编译器并不会报错。
7、全局const对象与const对象的初始化
const必须在定义的时候初始化,之后不能修改。与其他变量不同,除非特别说明,在全局作用域声明的const变量是定义该对象的文件的局部变量——此变量只存在于那个文件中,不能被其他文件访问。
若如下声明const变量,就可以在整个程序中访问const对象:
//文件1
extern const int bufSize = 512;//定义并初始化
//文件2
extern const int bufSize;//用文件1中的bufSize变量