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

为何类的const成员可在构造函数中修改?是否有相关标准规则?

为什么类的const成员可以在构造函数初始化列表中设置值?

这其实是C++标准特意规定的行为,核心要区分初始化和赋值的差异,以及const成员的"不可修改"到底指什么:

  • const成员的"只读"属性,是针对对象构造完成之后的生命周期而言的——一旦对象完全构造好,你就不能再修改它的const成员了,但在构造过程中,我们是在给这个const成员设置它的初始值,这不属于"修改"操作。
  • 你代码里的const int b = 5;是默认成员初始化,它的作用是当构造函数没有在初始化列表中显式初始化b时,才会用这个值来初始化b。而构造函数的初始化列表优先级更高,会直接覆盖默认的初始化值,这完全符合C++标准的规则。

举个直观的对比,如果你把代码改成这样,就会报错:

struct Bar {
    const int b = 5;
    Bar(int c) {
        b = c; // 这里是赋值,此时b已经是const成员,对象正在构造中,不能修改
    }
};

这时候编译器才会报错,因为你是在尝试修改一个已经初始化过的const成员,而不是在初始化阶段设置它的初始值。

回到你的代码:Bar(int c):b(c)是在对象的构造初始化阶段,直接给b设置初始值2,取代了默认的5,这个过程是合法的,因为const成员允许在初始化时被赋予特定值,只要之后不再修改就行。

内容的提问来源于stack exchange,提问作者Joseph D.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:23:12