这个代码是UB吗?
struct A
{
void nonconst() {}
};
const A& a = A{};
const_cast<A&>(a).nonconst();
换句话说,(临时)对象最初是
const
吗?我已经浏览了该标准,但找不到答案,因此希望引用相关部分。编辑:对于那些说
A{}
不是const
的人,那么您可以做A{}.nonconst()
吗? 最佳答案
参考a
的初始化由[dcl.init.ref]/5(粗体)给出:
因此,这意味着将初始化引用A{}
的类型prvalue表达式调整为const A
。
然后[conv.rval]指出:
因此,绑定(bind)到引用的临时对象的类型与调整后的prvalue
类型相同:const A
。
因此,代码const_cast<A&>(a).nonconst();
是 undefined 的行为。