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