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

关于const_cast未定义行为的澄清:引用与对象/值的区别

关于const_cast修改引用的行为判定

你的判断完全正确,第二段代码不属于未定义行为,你的理解也是准确的。

核心逻辑拆解

  • C++标准明确:只有当修改的对象本身被声明为const时,才会触发未定义行为,这和引用的const限定符没有直接关联。
  • 两段代码的本质差异:
    1. 第一段代码里,i是const int类型,属于const对象。哪怕通过const_cast去掉引用j的const限定去赋值,本质还是在修改一个const对象,因此属于未定义行为。
    2. 第二段代码里,i是普通int类型,本身具备可修改属性。const int& j = i只是限制了通过引用j不能直接修改i,但i的可修改本质没有改变。用const_cast<int&>(j)去掉引用的const限定后,赋值操作本质是对原始的非const对象i进行修改,这是符合C++标准的合法操作,执行后i的值会被修改为8。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 09:42:35