我有简单的代码:
int & i = *(new int(100));
据我所知,等式的RHS是一个rvalue。一个rvalue如何绑定到左值参考?
此外,如果这是合法的,它是否始终产生所需的结果,或者它是未定义的行为?如果我做delete &i
,它也会是一个未定义的行为吗?
答案 0 :(得分:1)
赋值的右侧是一个解除引用的指针,这是一个左值,因此绑定一个左值引用没有问题。该标准特别给出了左值(3.10 / 1)定义中的解引用指针示例:
左值(历史上所谓的左值,因为左值可能出现在赋值表达式的左侧)指定一个函数或一个对象。 [示例:如果E是指针类型的表达式,则* E是指向E指向的对象或函数的左值表达式。另一个例子,调用返回类型为左值引用的函数的结果是左值。 - 结束例子]
没有未定义的行为,因为i
引用了有效的对象。
关于delete
的问题已涵盖here。