C++程序员面试时十有八九会碰到const的问题,所以为了能快点找到工作,还是要了解一下const的用法
1. 用const修饰非指针变量,这是最简单的情况
const int a = 10;
int const b = 20;
a = 11; // error C3892
b = 21; // error C3892
加了const以后,a,b两个变量都变成read only的变量,试图修改其变量值的代码在编译时会出错。const int和int const是一样的,const前后顺序无所谓。
2. 当const和指针纠结在一起的时候,情况变得有点混乱
- 定义const变量的指针,指针指向的内容为read only
char buf1[32];
char buf2[32];
const char *p = buf1;
//char const *p = buf1; // same as above
//const (char*) p = buf1; // error C4430
p = buf2; // OK
*p = 'A'; // error C3892
const char和char const是一样的,注意const (char*) p这种写法是错误的,至少MS的编译器是这么认为的
- 指针自己为const变量,自己是read only
char buf1[32];
char buf2[32];
char* const p = buf1;
//char *const p = buf1; // same as above, but looks weird
p = buf2; // error C3892
*p = 'A'; // OK
char* const和char *const是一样的,*号随便和const及char中的哪一个放一起都无所谓,但*const看上去有点怪
- 被指向的变量和指针都为const,即都为read only
char buf1[32];
char buf2[32];
const char* const p = buf1;
p = buf2; // error C3892
*p = 'A'; // error C3892
总结:关键看*号的位置,const在*号前的是const变量的指针,const在*号后的指针本身为const。不必绞尽脑汁去考虑const char和char const的区别,其实它们没有区别
3. 函数参数中出现const,情况和2类似
4. 类的成员函数为const
牢记:标记为const的函数不修改data member的值,不能调用不是const的函数
但愿没有误导别人,但愿读MSDN时没看走眼