假设我有以下代码
int main(){
new int; // Is this expression l-value or r-value??
return 0;
}
我知道左值是持久对象(因为它在内存中具有特定的位置,即使在表达式结束后我们也可以访问后者)并且rvalues是临时对象(它在内存中没有位置并且在表达式结束后蒸发)。
我看到了一些rvalue表达式。如果表达式返回一个地址(内存中的特定位置),它怎么能是rvalue。或者它是否是rvalue因为表达式new int返回(地址值),它会消失,并且在表达式结束后永远不会被捕获。
答案 0 :(得分:14)
new int
是一个r值。
你不能使用:
int i;
(new int) = &i;
也许您正在考虑new int
返回其地址的对象。
表示返回地址的对象*(new int)
的表达式是l值。您可以使用:
*(new int) = 10;
这不是好代码。它会泄漏内存,但它是合法代码。