c++ - 为什么++(后增量运算符)不能是左值?

标签 c++ rvalue lvalue post-increment

代码

#include<iostream>
int main()
{
    int a=3;
    a++=5;
    std::cout<<a;
}
输出 (如预期)
[Error] lvalue required as left operand of assignment
1. 后增量运算符 ( a++ ) 在表中具有最高优先级。所以它肯定会在赋值运算符( = )之前执行。并根据后增量规则,变量 a 的值只有在执行该语句后才会增加。
那么当后增量运算符( ++ )
在赋值运算符( = )之前执行?
2.
C 前增量和后增量运算符都产生右值,但 C++ 将前增量运算符更新为左值,同时将后增量运算符仅保留为右值。原因是我们不能让它成为左值,因为它只有旧值,而不是更新的值。但我不能正确理解这个原因。
立即查看 a++有右值 3,而不是变量本身,对吗?但是如果它带来一个拥有左值的变量,那么 5 将插入其中,并且在语句结束后它的值将是 6。这有什么问题,为什么不能这样做?

最佳答案

And As per rule of post increment the value of variable a will increment only after execution of that statement.


这有点误导。变量立即递增。但表达式的结果是旧值。这应该更容易理解为什么它不能是左值。修改后的对象没有旧值,因此假设的左值不能引用该对象。该值是一个新的临时对象;它是一个纯右值。
打个比方,考虑编写一个与后增量做同样事情的函数。这就是它的编写方式(如果您为一个类定义了重载运算符重载,那么像这样的函数实际上就是您编写的一些更改的内容):
int post_increment(int& operand)
{
    int old = operand;
    operand += 1;
    return old;
}
您如何有意义地重写该函数以返回左值(引用)并仍然具有后增量预期的行为?

关于c++ - 为什么++(后增量运算符)不能是左值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68430952/

相关文章:

c++ - 改变每帧顶点的颜色(OpenGL)

c++ - 当Visual Studio 2017从github源构建时,c1083错误

C++ - 如何通过引用返回纯右值?

c++ - 允许使用右值的地址吗?

c - 尝试在 C 中引用值时出现 LValue 错误

c++ - 如何开发跨平台的C++项目?

c++ - Mac 上的问题 : "Can' t find a register in class BREG while reloading asm"

c++ - 当引用变量为 'dies' 时,引用变量会发生什么?

c++ - 冒泡排序中赋值 c++ 的左操作数需要左值

c++ - 右值引用被视为左值?