Встретил в коде участок следующего вида:
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;
Если (и, как правило), конструктор копирования никак не обрабатывает "самокопирование", то объект после такой "инициализации" будет пребывать в неопределенном состоянии.
Комментариев нет:
Отправить комментарий