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

C++中对constexpr、const、非const变量使用比较运算符有何差异?

C++不同修饰符变量比较运算差异说明

运行逻辑差异

两段代码的运行逻辑完全一致,最终输出结果没有任何区别:

  • 比较运算符的语义不受操作数的const/constexpr修饰符影响,只要变量实际存储的值相同,判断结果就完全一致
  • 修饰符仅作用于编译阶段的规则校验:const限制变量初始化后不可修改,constexpr要求变量值必须在编译期可确定,这些规则不会改变运行时的取值逻辑

执行性能差异

性能差异仅在特定编译配置下存在:

  • 无编译优化(O0级别)时,带修饰符的版本性能略优:ci、cei的值编译期就已确定且不可变更,编译器会直接将常量2、1代入比较运算,不需要额外从内存读取变量值;无修饰符版本的编译器会保守认为ci、cei可能被修改,每次比较都需要从栈内存读取值,多了访存开销
  • 开启O2及以上级别编译优化时,两段代码性能完全一致:编译器会通过常量传播、逃逸分析判断出无修饰符版本的ci、cei在比较前没有被修改,同样会将其优化为常量参与运算,最终生成的汇编指令和带修饰符的版本没有任何区别

补充说明

如果是自定义类型的变量参与比较,constexpr修饰的变量还可以将比较运算提前到编译期完成,完全消除运行时的运算开销,但当前示例中的基础int类型场景下,开启优化后两类实现的差异会被完全抹平。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:15:03