跳到主内容

C++ 难点

const* 与 *const

const 这样的修饰符在声明中的位置决定了它的语义。 在声明指针的情况下常引起混淆:

const int* x;
int* const y;

在上例子中的 x 的声明,const 修饰的是 int* ,因此, x 指向的值不能改变。但 x 本身可以改变它的指向:

*x = 0; // Error
x = &other;

而在 y 的声明中,const 修饰的是 y ,因此,y 所指向的值可以改变,而 y 本身的指向不可改变:

&y = 0;
y = &other; // Error

当然,可以连用以同时限定两者:

const int* const z;

完整的示例代码见:

#include <iostream>
int Ax = 1;
int Bx = 2;
int Cx = 4;
int Ay = 1;
int By = 2;
int Cy = 4;
int main() {
    const int* x = &Ax;
    int* const y = &Ay;
    const int* const z = Ax;
    // x = &Bx;
    // *x = Cx;     // Error
    // y = &By;     // Error
    // *y = Cy;
    std::cout << *x << std::endl
              << *y << std::endl;
    return 0;
}