gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:09:03 25 4
gpt4 key购买 nike

代码

#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/

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