是分配内存的右值表达式或左值表达式

Is the expression that allocates memory rvalue expression or lvalue expression?

本文关键字:表达式 分配 内存      更新时间:2023-10-16

假设我有以下代码

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

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

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

new int为r值

不能使用:

int i;
(new int) = &i;

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

*(new int) = 10;

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