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

从constexpr成员函数访问非const数据成员是否符合C++标准

结论

该行为属于C++标准明确允许的合法用法,不是GCC、MSVC的非标准实现扩展。

规则说明
  • C11标准中,constexpr非静态成员函数默认隐含const修饰,因此此时不允许定义非const的constexpr成员函数,你的代码在C11模式下编译会直接报错。
  • 从C++14开始,标准移除了constexpr成员函数默认带const的限制,只要函数逻辑符合constexpr的要求,就可以定义非const的constexpr成员函数。

另外constexpr函数本身就同时支持两种调用场景:既可以在编译期常量上下文调用,也可以像普通函数一样在运行期调用,你的示例代码里foo.get_val()属于运行期调用,完全符合标准要求。

验证方法

你可以手动指定编译器使用C11标准编译上述代码,GCC、MSVC都会抛出编译错误,而指定C14及以上版本标准都能正常编译运行,也能印证这是标准原生支持的特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:24:09