You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 13:14:53