这个代码是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();是未定义的行为。

关于c++ - 临时对象最初是const吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54334861/

10-09 09:41