Я играл с моим компилятором C ++ и заметил рекурсивную зависимость глобальной переменной, и вызов функции не отклоняется. Пример:
#include <iostream>
int foo();
int t = foo();
int foo()
{
std::cout << "Hello before main: " << t << "\n";
t = 10;
return t + 10;
}
int main()
{
std::cout << "Hello from main.\n";
}
Эта скомпилированная программа распечатывает следующее:
Hello before main: 0
Hello from main.
Поэтому, когда я использую объявление t
, оно зависит от функции foo
, которая снова имеет зависимость от t
. Компилятор C ++ разбивает этот l oop, по существу, t
инициализируется нулями до выполнения выражения присваивания.
Это меня удивило. Это правильное поведение в соответствии со стандартом или я вызываю здесь какое-то неопределенное поведение?