运算符优先于+和++

时间:2014-02-07 09:40:19

标签: c++ c operators lexer operator-precedence

给出以下代码:

 int  a=0,b=1;
 int r=a+++b;

执行的操作和顺序是什么?

   a++ + b
   a + ++b

我这个编译器具体还是依赖于标准?

2 个答案:

答案 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