Страницы

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

четверг, 9 января 2020 г.

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

#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



После того, как переменная была объявлена, ей сразу же было присвоено какое то значение (даже если ее не инициализировать), равное тому мусору, которое было в выделенной памяти до нее. Действительно, хотелось бы увидеть код, где это используется, но например так можно получить какое то случайное целое число.

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

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