Страницы

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

пятница, 15 февраля 2019 г.

Самоприсваивание переменной при определении

Встретил в коде участок следующего вида:
int a = a;
компиляция проходит успешно. Вопрос - Как это работает?


Ответ

N1256 6.2.1/7
Any other identifier has scope that begins just after the completion of its declarator .
То есть область видимости имени переменной начинается сразу после declarator. В Вашем случае в инициализаторе имя уже видно и может быть использовано. Это значит, что Вы можете инициализировать переменную саму собой, соответственно при этом она получит неопределенное значение.
К слову, в C++ действует такое же правило, и это значит, что возможно скопировать еще неинициализированный объект:
Some s1 = s1; std::string s1 = s2;
Если (и, как правило), конструктор копирования никак не обрабатывает "самокопирование", то объект после такой "инициализации" будет пребывать в неопределенном состоянии.

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

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