在page 228
的“C ++ primer 5th edition”中,Table 4.4. Operator Precedence
表显示了操作符和操作符的关联性。
令我困惑的是在这个表中说Prefix增量/减量是从右到左的关联,而Postfix增量/减量也是从右到左所以有字母“R”表示从右到左。但是在www.cppreference.com
中,我看到后缀增量/减量是从左到右的关联。
如果有人通过给出包含复合表达式的示例来澄清事情,那么非常感谢。
The C++ grammar定义了一个后缀表达式,如下所示:
postfix-expression:
primary-expression
...
postfix-expression ++
....
在解析a ++ ++
时,a
是一个主要表达式,因此a ++
是一个后缀表达式。最终的++
适用于该postfix-expression的结果。
简而言之,++
组从左到右。
同样的事情适用于我们通常认为的后缀运算符:它们适用于后缀表达式,因此它们从左到右分组。
正如评论中所提到的那样,走另一条路将使ptr[i]++
相当时髦。
看一下我在网上找到的那本书的(可能是非法的)PDF版本,我怀疑postfix ++和postfix的条目都是剪切和粘贴错别字。据推测,这两个运算符都在第147页描述,前缀为++和prefix--,但唯一的讨论是关于前缀++和前缀 - 。
Errata没有安全的书。每本书的版本都会增加一些改进并纠正一些错误。作者总是欣赏勘误报道。无论如何:后固定增量和-decrement是从左到右的关联。
int x = 5;
x++;
正如你从上面的表达式中看到的那样:操作符x
is在运算符lhs
的++
,因此你很容易理解它。
++x;
现在操作数x
在右边,因此预增量/减量是从右到左。
前缀运算符是从右到左关联的:
https://en.cppreference.com/w/cpp/language/operator_precedence
Prata和Lippman的C ++ Primer第5版都没有第228页的任何运营商优先级表。