Как компилируется код где я инициализирую переменную её же значением?
Я написал следующий код на c++ и он компилируется:
int main() {
int x = x;
return 0;
}
Вопрос, как? Переменная x
ведь не существует до собственного объявления. Как тогда я могу использовать её для инициализации её же самой?
Ответы (2 шт):
Ответ на вопрос нашел в разделе Точка объявления статьи Область видимости на cppreference.com.
Для переменных и других имён, представленных простыми объявлениями, точка объявления находится сразу после объявления имени и перед его инициализатором, если таковой имеется:
int x = 32; // внешний x находится в области видимости
{
int x = x; // внутренний x находится в области видимости до инициализатора (= x)
// при этом внутренний x не инициализируется значением внешнего x (32),
// при этом внутренний x инициализируется собственным (неопределённым)
// значением
}
Нужно понимать разницу между областью видимости переменной и временем ее жизни.
Область видимости, как вы уже заметили, начинается сразу как компилятор видит ее имя в объявлении, поэтому int x = x;
компилируется.
Но время жизни x
начинается после завершения иницализации, а попытка прочитать ее до начала времени жизни вызывает неопределенное поведение.