Страницы

Поиск по вопросам

суббота, 13 октября 2018 г.

Неоднозначный разбор выражения в синтаксисе C++

Есть следующее валидное выражение на C++:
a+++b;
Как его должен понимать компилятор: как
a + (++b);
или как
(a++) + b;
Проверяем
#include using namespace std;
int main() { int a = 1; int b = 10; int c = a+++b; cout << a << ' ' << b << ' ' << c; return 0; }
2 10 11
Почему это будет разобрано именно так? Как определяется предпочитаемый вариант интерпретации +++?


Ответ

Есть такой принцип - лексема считывается по-максимуму (это называется правилом максимального поглощения). Т.е. читает первый плюс. Затем второй. Есть такая лексема - ++? Есть. Значит, это ++. Что там дальше? Еще плюс? Есть такая лексема - +++? Ах, в языке такой нет? Значит, это ++. Следующий плюс - начало новой лексемы... И приоритет операторов тут совершенно ни при чем.

Комментариев нет:

Отправить комментарий