这个代码是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 的行为。

07-26 04:16