Для типов встраивания это ошибка времени компиляции, так как для присвоения требуется lvalue, а a ++ (что обусловлено приоритетом оператора, вычисляемого первым), является rvalue.В вашем примере компилятор выдаст ошибку, подобную этой , см. Compiler-explorer :
<source>: In function 'int main()':
<source>:6:9: error: lvalue required as left operand of assignment
6 | a++ += b;
| ^
Compiler returned: 1
Если у вас есть пользовательский тип (в данном случае бессмыслица, но для демонстрации), который выглядит какthis
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;
}
Он компилируется без проблем, так как теперь ++ возвращает lvalue.