是分配内存rvalue表达式还是左值表达式的表达式?

时间:2016-08-08 04:55:15

标签: c++

假设我有以下代码

int main(){
    new int; // Is this expression l-value or r-value??

    return 0;

}

我知道左值是持久对象(因为它在内存中具有特定的位置,即使在表达式结束后我们也可以访问后者)并且rvalues是临时对象(它在内存中没有位置并且在表达式结束后蒸发)。

我看到了一些rvalue表达式。如果表达式返回一个地址(内存中的特定位置),它怎么能是rvalue。或者它是否是rvalue因为表达式new int返回(地址值),它会消失,并且在表达式结束后永远不会被捕获。

1 个答案:

答案 0 :(得分:14)

new int是一个r值。

你不能使用:

int i;
(new int) = &i;

也许您正在考虑new int返回其地址的对象。 表示返回地址的对象*(new int)的表达式是l值。您可以使用:

*(new int) = 10;

这不是好代码。它会泄漏内存,但它是合法代码。