<分区>
给定以下代码:
int a=0,b=1;
int r=a+++b;
执行了哪些操作以及按什么顺序执行?
a++ + b
a + ++b
这个编译器是特定的还是取决于标准?
<分区>
给定以下代码:
int a=0,b=1;
int r=a+++b;
执行了哪些操作以及按什么顺序执行?
a++ + b
a + ++b
这个编译器是特定的还是取决于标准?
最佳答案
它是 (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? 有一些很好的答案这应该更详细地解释这一点。
关于c++ - + 和++ 的运算符优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21624124/