取消引用右值指针会产生左值吗?

时间:2013-11-11 07:34:42

标签: c++ memory

我有简单的代码:

int & i = *(new int(100));

据我所知,等式的RHS是一个rvalue。一个rvalue如何绑定到左值参考?

此外,如果这是合法的,它是否始终产生所需的结果,或者它是未定义的行为?如果我做delete &i,它也会是一个未定义的行为吗?

1 个答案:

答案 0 :(得分:1)

赋值的右侧是一个解除引用的指针,这是一个左值,因此绑定一个左值引用没有问题。该标准特别给出了左值(3.10 / 1)定义中的解引用指针示例:

  

左值(历史上所谓的左值,因为左值可能出现在赋值表达式的左侧)指定一个函数或一个对象。 [示例:如果E是指针类型的表达式,则* E是指向E指向的对象或函数的左值表达式。另一个例子,调用返回类型为左值引用的函数的结果是左值。 - 结束例子]

没有未定义的行为,因为i引用了有效的对象。

关于delete的问题已涵盖here