Страницы

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

понедельник, 9 декабря 2019 г.

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

#cpp


Есть следующее валидное выражение на 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


Почему это будет разобрано именно так? Как определяется предпочитаемый вариант интерпретации +++?
    


Ответы

Ответ 1



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

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

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