gpt4 book ai didi

c++ - 分配内存的表达式是右值表达式还是左值表达式?

转载 作者:可可西里 更新时间:2023-11-01 15:51:59 25 4
gpt4 key购买 nike

假设我有以下代码

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

return 0;

}

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

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

最佳答案

new int 是一个右值。

你不能使用:

int i;
(new int) = &i;

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

*(new int) = 10;

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

关于c++ - 分配内存的表达式是右值表达式还是左值表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38821537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com