去除const转换后修改绑定到const引用的临时对象是否为UB?
代码是否存在未定义行为?
这段代码不存在未定义行为,原因如下:
- 首先,
static_cast<int const&>(42)会将字面量42(类型为非const的int纯右值)绑定到const左值引用,此时会创建一个临时的int对象(注意这个临时对象本身是非const的),引用的生命周期会延长至该语句结束。 const_cast<int&>仅移除了引用的const限定,并没有改变临时对象本身的非const属性——因为对象本身是可修改的,所以通过转换后的非const引用对其赋值21是完全合法的操作。
简单来说:临时对象本身不是const的,只是借助const引用来访问它,去掉引用的const限定后修改对象,符合C++标准的规定,不属于未定义行为。
内容的提问来源于stack exchange,提问作者user24551355
相关产品推荐
相关产品推荐

