c++ - + 和++ 的运算符优先级

标签 c++ c operators lexer operator-precedence

<分区>

给定以下代码:

 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/

相关文章:

c++ - 使数组成为 C++ 函数的可选参数

c++ - (c++) 我需要在新类的头文件中包含什么

c - 指针算术的差异 (&x[5]-x)

C: 使用 sprintf( ) 做 IP 地址解析,不正确的值

c++ - 如何使用同一个库的多个实例

c++ - itk 3.20.1 处理器亲和性

c - 数字左移-1的值是多少

c++ - += 运算符在 C++ 中是如何实现的?

java - 我对逻辑运算符感到困惑,有人可以帮助我清理我的困惑吗?多个参数?

c++ - 有没有办法沿着对角线填充线性渐变?