在page 228
的“ C ++第五版”中,表Table 4.4. Operator Precedence
显示了操作数和操作数的关联性。
我在表中感到困惑的是,前缀的递增/递减是从右到左的关联,并且前缀的递增/递减也是从右到左的联系,因此字母“ R”表示从右到左。但是在www.cppreference.com
中,我看到后缀的增/减是从左到右的关联。
如果有人通过举一个包含Compound expression的示例来使事情变得清晰起来,那么我们将不胜感激。
答案 0 :(得分:5)
The C++ grammar定义了这样的后缀表达式:
postfix-expression:
primary-expression
...
postfix-expression ++
....
在解析a ++ ++
时,a
是主要表达式,因此a ++
是后缀表达式。最后的++
适用于该postfix-expression的结果。
简而言之,++
从左到右分组。
同一件事适用于我们通常认为的所有后缀运算符:它们适用于后缀表达式,因此它们从左到右分组。
如评论中所述,采用其他方法会使ptr[i]++
变得很时髦。
看着我在网上找到的那本书的(可能是非法的)PDF版本,我怀疑postfix ++和postfix的条目是剪切粘贴的错别字。据说这两个运算符都在第147页上进行了描述,prefix ++和prefix--也一样,但是唯一的讨论是关于prefix ++和prefix-。
答案 1 :(得分:2)
没有勘误书。本书的每个版本都添加了一些增强功能并纠正了一些错误。作者始终赞赏勘误报告。无论如何:固定后增量和-减量是从左到右的关联。
int x = 5;
x++;
从上面的表达式中可以看到:操作数x
位于运算符lhs
的{{1}}处,因此您很容易理解它。
++
现在操作数++x;
在右边,因此预增/减是从右到左。
答案 2 :(得分:-1)
前缀运算符从右到左关联:
https://en.cppreference.com/w/cpp/language/operator_precedence
Prata或Lippman的C ++ Primer 5th Edition都没有第228页的任何操作员优先级表。