Рассмотрим следующую программу: (см видеодемонстрацию here.)C++ инициализация области видимости пространства имен переменной
#include <iostream>
inline double fun()
{
return 3.0;
}
extern double m;
double d2=m;
int main()
{
std::cout<<d2;
}
double m=fun();
Я ожидал получить выход программы в 3.0, но это дает мне выход 0. Почему?
Похоже, переменная d2 инициализируется статически?
Не следует ли его инициализировать динамически?
Я протестировал его на g ++ 4.8.1, 4.9.2 & MSVS 2010 & получить 0 в качестве вывода.
'Похоже, что переменная d2 инициализирована статически? И «d2», и «m» инициализируются до нуля при загрузке программы. Затем 'd2' инициализируется из' m' (который все еще равен 0). Наконец, 'm' инициализируется из' fun() '. –
Почему? Вы печатаете 'd2', а не' m'. Если у вас есть 'int x = 0; int y = x; x = 42; ', вы ожидаете, что' y' также будет ретроактивно установлен на 42? –
[Этот ответ] (http://stackoverflow.com/a/22117407/1413133) будет полезен. –