Гарантированно ли инициализируется std :: cout?

Что я знаю о C ++, так это то, что не следует предполагать порядок построения (и разрушения) глобальных экземпляров.

Пока я пишу код с глобальным экземпляром, который использует 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

Есть ли вероятность, что код не выполняется должным образом?

40
задан Destructor 3 December 2015 в 13:55
поделиться