我對C++的瞭解是,不應該假定全局實例的構造(和破壞)的順序。std :: cout保證被初始化?
雖然我用全局實例編寫代碼,但在構造函數&析構函數中使用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
是否有可能按預期的代碼不能運行?
關聯 http://stackoverflow.com/questions/6919593/is-cout-guaranteed-available-during-static-deinitialization這也包括在答案的建設。 – adl 2012-01-09 07:11:12
無法假定靜態存儲持續時間對象在全局作用域的初始化順序,但有強制初始化順序的技巧。 – 2012-01-09 10:04:28
PS。還要注意破壞的順序是有保證的(與構造相反)。 – 2012-01-09 10:11:59