Suponha que tenhamos duas unidades de tradução:
//--a.cpp--//
int a;
int b;
int c;
int main(){ }
//--b.cpp--//
int d;
int e;
int f;
Esse programa não inicia um thread. Daí (3.6.2 / 2)
a inicialização de uma variável é sequenciada indeterminadamente em relação à inicialização de uma variável definida em um unidade de tradução.
Isso significa que somente após a inicialização de todas as variáveis em uma unidade de tradução (por ex. b.cpp
), a implementação começa a inicializar a variável em outra unidade de tradução (a.cpp
)?
Respostas:
1 para resposta № 1A inicialização de globais em uma unidade de tradução está em ordem de definição, portanto a, b, c
e d, e, f
.
Mas não é especificado se é a, b, c
e depois d, e, f
ou se é o contrário.
Ou mesmo em ordem interdisciplinar (digamos, a, d, b, c, e, f
), embora eu pense que a maioria das implementaçõesirá inicializar todas as variáveis globais a partir de uma unidade de tradução em uma única linha, portanto, diferente de em multithreading, eu não acho que isso vai acontecer na prática.
0 para resposta № 2
Não, indeterminadamente seqüenciado significa que elesocorrer em alguma ordem, mas essa ordem não é especificada. As variáveis em uma unidade de tradução serão inicializadas antes ou depois das variáveis na outra.