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

C++构造函数初始化列表中使用类成员初始化const成员是否正确

问题结论

你给出的写法是正确的,在初始化m2时,m1已经完成构造,整个操作合法安全。

原理说明
  • C++标准对类成员初始化顺序有明确规定:非静态数据成员的初始化顺序严格遵循其在类定义中的声明顺序,和构造函数初始化列表里的书写顺序完全无关。
  • 你提供的示例代码中,m1的声明顺序早于m2,因此初始化列表执行时,会先调用M1Type的构造函数完成m1的构造,再调用M2Type的构造函数,用已经构造完成的m1初始化m2,不存在任何问题。
注意事项

如果调整类成员的声明顺序,把const M2Type m2放在M1Type m1之前,那么哪怕初始化列表里仍然写的是: m1(x), m2(m1),实际执行时也会先初始化m2,此时m1还未构造,就会触发未定义行为。


内容的提问来源于stack exchange,提问作者mro47

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:45:09