#cpp #c
Встретил в коде участок следующего вида: int a = a; компиляция проходит успешно. Вопрос - Как это работает?
Ответы
Ответ 1
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; Если (и, как правило), конструктор копирования никак не обрабатывает "самокопирование", то объект после такой "инициализации" будет пребывать в неопределенном состоянии.Ответ 2
После того, как переменная была объявлена, ей сразу же было присвоено какое то значение (даже если ее не инициализировать), равное тому мусору, которое было в выделенной памяти до нее. Действительно, хотелось бы увидеть код, где это используется, но например так можно получить какое то случайное целое число.
Комментариев нет:
Отправить комментарий