Есть следующее валидное выражение на C++:
a+++b;
Как его должен понимать компилятор: как
a + (++b);
или как
(a++) + b;
Проверяем
#include
int main() {
int a = 1;
int b = 10;
int c = a+++b;
cout << a << ' ' << b << ' ' << c;
return 0;
}
2 10 11
Почему это будет разобрано именно так? Как определяется предпочитаемый вариант интерпретации +++?
Ответ
Есть такой принцип - лексема считывается по-максимуму (это называется правилом максимального поглощения). Т.е. читает первый плюс. Затем второй. Есть такая лексема - ++? Есть. Значит, это ++. Что там дальше? Еще плюс? Есть такая лексема - +++? Ах, в языке такой нет? Значит, это ++. Следующий плюс - начало новой лексемы... И приоритет операторов тут совершенно ни при чем.
Комментариев нет:
Отправить комментарий