我有简单的代码:
int & i = *(new int(100));
据我所知,等式的 RHS 是一个右值。右值如何绑定到左值引用?
此外,如果这是合法的,它是否总是产生预期的结果,或者它是一种未定义的行为?如果我这样做delete &i
,它也会是一个未定义的行为吗?
赋值的右侧是一个取消引用的指针,这是一个左值,因此将左值引用绑定到它没有问题。该标准在其左值 (3.10/1) 的定义中特别给出了取消引用指针的示例:
左值(历史上称为左值,因为左值可能出现在赋值表达式的左侧)指定函数或对象。[ 示例:如果 E 是指针类型的表达式,则 *E 是一个左值表达式,指的是 E 指向的对象或函数。作为另一个示例,调用返回类型为左值引用的函数的结果是左值。—结束示例]
没有未定义的行为,因为i
引用了一个有效的对象。
你的问题在这里delete
涵盖。