Lo que sé sobre C++ es que no se debe asumir el orden de las construcciones (y destrucciones) de las instancias globales.¿Está garantizado que std :: cout esté inicializado?
Mientras estoy escribiendo código con una instancia global que utiliza std::cout
en el constructor & destructor, recibí una pregunta.
std::cout
es también una instancia global de iostream. ¿Está garantizado que el std::cout
se inicialice antes que cualquier otra instancia global?
Escribí un código de prueba simple y funciona perfectamente, pero aún no sé por qué.
#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;
}
Imprime
test::ctor
Hello world
test::dtor
¿Hay alguna posibilidad de que el código no se ejecuta como se esperaba?
Relacionados con http://stackoverflow.com/questions/6919593/is-cout-guaranteed-available-during-static-deinitialization que también cubre la construcción en la respuesta. – adl
No se puede asumir el orden de inicialización de los objetos de duración de almacenamiento estático en el alcance global, pero hay trucos para forzar el orden de inicialización. –
PD.También tenga en cuenta que el orden de destrucción está garantizado (el inverso de la construcción). –