C++ const 关键字的简单总结

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时没看走眼

 

你可能感兴趣的:(编程)