Что я знаю о С++, так это то, что порядок конструкций (и разрушений) глобальных экземпляров не должен приниматься.
Пока я пишу код с глобальным экземпляром, который использует std::cout
в конструкторе и деструкторе, у меня возник вопрос.
std::cout
также является глобальным экземпляром iostream. Является ли std::cout
гарантией инициализации перед любыми другими глобальными экземплярами?
Я написал простой тестовый код, и он отлично работает, но все же я не знаю почему.
#include <iostream>
struct test
{
test() { std::cout << "test::ctor" << std::endl; }
~test() { std::cout << "test::dtor" << std::endl; }
};
test t;
int main()
{
std::cout << "Hello world" << std::endl;
return 0;
}
Он печатает
test::ctor
Hello world
test::dtor
Есть ли вероятность, что код не будет работать, как ожидалось?