是分配内存的右值表达式或左值表达式
Is the expression that allocates memory rvalue expression or lvalue expression?
假设我有以下代码
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;
这不是好的代码。它会泄漏内存,但它是合法的代码。
相关文章:
- 在新表达式中,在内存分配后评估了初始化器
- 如何使用堆栈来验证C 中BNF的表达式或分配
- 如何将新的 lambda 表达式分配给函数对象?
- 表达式不可分配,将 x 和 y 值分配给形状的点
- 表达式无法分配(无需使用 *或 /)的计算器
- 带有数组类型表达式的错误分配
- 分配中的折叠表达式
- lambda表达式分配成员函数指针
- 指针:在 c++ 中不可分配的表达式
- 将值分配给指针时:表达式必须是可修改的lvalue
- 是多个分配表达式(a = 123,b = 456,c = 789)
- 在C++上给定布尔表达式的情况下分配整数值
- 右值分配的三元表达式不使用移动分配运算符
- 动态分配正确对齐的内存:char数组上的新表达式是否合适
- 分配给正则表达式方法的布尔值
- 如何避免稀疏表达式中的内存分配
- Boost表达式sregex分配和捕获组问题
- 内存分配操作符和表达式
- 是分配内存的右值表达式或左值表达式
- 对内存分配和构造函数的调用是否可以与执行"new"表达式所需的其他操作交错?