Рассмотрим следующую программу: (см. живую демонстрацию здесь.)
#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 в качестве вывода.
It looks like variable d2 is initialized statically?
Вроде того. Иd2
, иm
первым делом инициализируются 0 при загрузке программы. Затемd2
инициализируется изm
(которое по-прежнему равно 0). Наконец,m
инициализируется изfun()
. - person Igor Tandetnik   schedule 27.09.2015d2
, а неm
. Если у вас естьint x = 0; int y = x; x = 42;
, вы ожидаете, чтоy
также будет задним числом установлено на 42? - person Igor Tandetnik   schedule 27.09.2015