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

时间:2019-02-27 19:29:28

标签: c++ operator-precedence

page 228的“ C ++第五版”中,表Table 4.4. Operator Precedence显示了操作数和操作数的关联性。

我在表中感到困惑的是,前缀的递增/递减是从右到左的关联,并且前缀的递增/递减也是从右到左的联系,因此字母“ R”表示从右到左。但是在www.cppreference.com中,我看到后缀的增/减是从左到右的关联。

如果有人通过举一个包含Compound expression的示例来使事情变得清晰起来,那么我们将不胜感激。

3 个答案:

答案 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页的任何操作员优先级表。