后缀增量和减量是从左到右关联还是相反?

问题描述 投票:2回答:3

page 228的“C ++ primer 5th edition”中,Table 4.4. Operator Precedence表显示了操作符和操作符的关联性。

令我困惑的是在这个表中说Prefix增量/减量是从右到左的关联,而Postfix增量/减量也是从右到左所以有字母“R”表示从右到左。但是在www.cppreference.com中,我看到后缀增量/减量是从左到右的关联。

如果有人通过给出包含复合表达式的示例来澄清事情,那么非常感谢。

c++ operator-precedence
3个回答
5
投票

The C++ grammar定义了一个后缀表达式,如下所示:

postfix-expression:
    primary-expression
    ...
    postfix-expression ++
    ....

在解析a ++ ++时,a是一个主要表达式,因此a ++是一个后缀表达式。最终的++适用于该postfix-expression的结果。

简而言之,++组从左到右。

同样的事情适用于我们通常认为的后缀运算符:它们适用于后缀表达式,因此它们从左到右分组。

正如评论中所提到的那样,走另一条路将使ptr[i]++相当时髦。

看一下我在网上找到的那本书的(可能是非法的)PDF版本,我怀疑postfix ++和postfix的条目都是剪切和粘贴错别字。据推测,这两个运算符都在第147页描述,前缀为++和prefix--,但唯一的讨论是关于前缀++和前缀 - 。


2
投票

Errata没有安全的书。每本书的版本都会增加一些改进并纠正一些错误。作者总是欣赏勘误报道。无论如何:后固定增量和-decrement是从左到右的关联。

int x = 5;
x++;

正如你从上面的表达式中看到的那样:操作符xis在运算符lhs++,因此你很容易理解它。

++x;

现在操作数x在右边,因此预增量/减量是从右到左。


-1
投票

前缀运算符是从右到左关联的:

https://en.cppreference.com/w/cpp/language/operator_precedence

Prata和Lippman的C ++ Primer第5版都没有第228页的任何运营商优先级表。

© www.soinside.com 2019 - 2024. All rights reserved.