Является ли постфиксный приращение и уменьшение слева направо ассоциативным или наоборот? - PullRequest
0 голосов
/ 27 февраля 2019

В "C ++ primer 5th edition" на page 228 В таблице Table 4.4. Operator Precedence показаны операторы и ассоциативность операндов.

Что меня смущает, так это то, что в этой таблице сказано, что приращение / уменьшение префикса - это Right-Ассоциативно слева направо, а также постфиксное увеличение / уменьшение также справа налево. Итак, есть буква «R», которая означает справа налево.Но в www.cppreference.com я вижу, что постфиксные приращения / убывания являются ассоциативными слева направо.

Если кто-то прояснит ситуацию, приведя пример, содержащий сложное выражение, тогда это действительно приветствуется.

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Префиксные операторы являются ассоциативными справа налево:

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

Ни в C ++ Primer 5th edition от Prata, ни в Lippman нет таблиц приоритетов операторов на странице 228.

0 голосов
/ 28 февраля 2019

Там нет книжного сейфа от опечаток.Каждая версия книги добавляет некоторые улучшения и исправляет некоторые ошибки.Автор всегда ценит ошибочные сообщения.В любом случае: инкремент пост-исправления и -decrement ассоциативны слева направо.

int x = 5;
x++;

Как видно из выражения выше: операнд x находится в lhs оператора++ Таким образом, вы легко можете понять это.

++x;

Теперь операнд x находится справа, поэтому предварительное увеличение / уменьшение - справа налево.

0 голосов
/ 27 февраля 2019

Грамматика C ++ определяет выражение постфикса следующим образом:

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

При синтаксическом анализе a ++ ++, a - это первичное выражение, поэтому a ++ - это постфикс-expression.Последний ++ относится к результату этого постфиксного выражения.

Короче говоря, ++ групп слева направо.

То же самое относится ко всему, что мы обычно думаемкак постфиксные операторы: они применяются к постфиксному выражению, поэтому они группируются слева направо.

Как уже упоминалось в комментарии, переход на другой путь сделает ptr[i]++ довольно прикольным.

Взглядв (вероятно, нелегальной) PDF-версии этой книги, которую я нашел в Интернете, я подозреваю, что записи для postfix ++ и postfix-- являются опечатками, которые можно вырезать и вставить.Предполагается, что оба этих оператора описаны на стр. 147, как и префикс ++ и префикс--, но единственное обсуждение здесь касается префикса ++ и префикса -.

...