내가 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
코드가 예상대로 실행되지 않는 가능성이있다 인쇄? §27.3/2 따르면
관련 항목 http://stackoverflow.com/questions/6919593/is-cout-guaranteed-available-during-static-deinitialization 또한 답변의 구성에 대해 다룹니다. – adl
전역 범위에서 정적 저장 기간 개체의 초기화 순서를 가정 할 수는 없지만 초기화 순서를 강제하는 트릭이 있습니다. –
추 신 :또한 파괴 순서가 보장된다는 점에 유의하십시오 (구조의 역함수). –