首先,空间确实很重要——它有助于编译器解决歧义。
只要有表达式,编译器就会从右到左解析它。它首先查找所有后增量运算符,然后查找前增量运算符,因为后者的优先级低于前者。因此,前增量运算符所做的任何修改都将应用于整个表达式,然后后增量的更改将应用于下一个表达式。
解释
- ++a首先增加a的值,然后返回引用a的左值,所以如果使用a,那么它将是增加的值。
在您的情况下,总共有两个 ++a,因此 a 的值将增加到 12 并因此分配给 a。所以你的表达式中的所有 a 都将保持值 12 给你 c=48 的值。
- a++ 首先返回一个值为 a 的右值,即旧值,然后在下一个完整表达式之前的未指定时间递增 a。
在您的情况下,如果您在表达式之后使用 a 的值,它将是 13,因为在前一个表达式中只有一个 a++。
例如。
int a = 10;
int C = a++ + ++a + ++a +a; // Here a=12 and the post increment effect will be applied in the next expression
int B = a + a; // Here a=13 the effect of previous post increment.
关于错误
表达式中没有空格,编译器在解析表达式时会感到困惑,因此没有任何值来进行赋值。
PS:左值是一个可以作为赋值目标的值。在 C/C++ 中,前置递增(递减)和后置递增(递减)运算符需要 L 值表达式作为操作数。提供 R 值或 const 限定变量会导致编译错误。