[英]Why does the expression 'a++ += b' give an error?
#include <iostream.h>
int main()
{
int a = 2;
int b = 3;
a++ += b;
std::cout << a;
}
我对此的理解是,该表达式将首先评估 a+b,将该值存储在 a 中,然后将其递增。 这里发生了什么?
对于内置类型,这是一个编译时错误,因为赋值需要一个左值,而 a++(这是由于首先评估运算符优先级)是一个右值。 在您的示例中,编译器将发出这样的错误,请参阅 compiler-explorer :
<source>: In function 'int main()':
<source>:6:9: error: lvalue required as left operand of assignment
6 | a++ += b;
| ^
Compiler returned: 1
如果你有一个自定义类型(在这种情况下是废话,但用于演示)看起来像这样
class A
{
public:
A operator++(int)
{
return A{};
}
A operator+=(const A&)
{
return A{};
}
int i;
};
int main()
{
A a;
A b;
a++ += b;
return 0;
}
它编译没有问题,因为 a++ 现在产生一个左值。
除了错误的入口点和标题之外,这段代码还有两个问题。
a
被定义为const
因此它不能是左值,因此不受 ++ 或 += 运算符或任何赋值的影响。 这是一个常数!
增量运算符++也不返回左值,因此其结果不能是赋值运算符的参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.