给出以下代码:
int a=0,b=1;
int r=a+++b;
执行的操作和顺序是什么?
a++ + b
a + ++b
我这个编译器具体还是依赖于标准?
答案 0 :(得分:4)
由于运算符优先级,它是(a++) + b
但不是。
它被解析为(a++) + b
,因为编译器从一系列字符中获取最长的令牌。换句话说,词法分析器会一直读取字符,直到它遇到的内容不能与它已有的内容相同。
这也是它将>=
解释为一个令牌而不是>
和=
,以及double
解释为'double'而不是'do
uble'的方式
对于像
这样的语句,是运算符优先级的规则a || b && c
// "a || (b && c)" NOT "(a || b) && c", because && takes precedence
但是,在您的情况下,运算符++和+已经确定。确定运算符后,可以应用运算符优先级的规则。
Why doesn't a+++++b work in C?有一些好的答案可以更详细地解释这一点。
答案 1 :(得分:1)
由operator precedence管辖。由于postfix ++的优先级高于+运算符,因此它更紧密地绑定到a后增加,然后添加到b,结果是:
(a++) + b