关于const修饰的C++类实例中指针成员类型的疑问
问题解答
当你创建const foo的实例时,成员a的类型是int* const,你的推测是对的。
原因很直接:在C++里,const修饰类实例时,会把该实例的所有非静态成员都变为const属性。对于指针成员来说,这里的const修饰的是指针本身,而不是指针指向的内容:
int* const:指针自身是不可修改的,你不能让a指向另一个int变量,但可以通过a修改它指向的int值(只要目标内存可写)。- 如果是
const int*,那是指针指向的内容不可修改,但指针本身可以随意变更指向,这和const实例的成员属性逻辑不符。
你可以用一段简单代码验证:
class foo { public: int* a; }; int main() { int x = 10, y = 20; const foo f; f.a = &y; // 编译报错:不能给const指针赋值,说明a是int* const *f.a = 30; // 编译通过:可以修改指针指向的内容,说明指向的不是const int return 0; }
内容的提问来源于stack exchange,提问作者noboby
相关产品推荐
相关产品推荐

