Supposons que nous ayons deux unités de traduction:
//--a.cpp--//
int a;
int b;
int c;
int main(){ }
//--b.cpp--//
int d;
int e;
int f;
Ce programme ne démarre pas de fil. D'où (3.6.2 / 2)
l'initialisation d'une variable est séquencée de manière indéterminée avec par rapport à l’initialisation d’une variable définie dans un autre unité de traduction.
Cela signifie-t-il qu’après l’initialisation de toutes les variables d’une unité de traduction (par exemple, b.cpp
), l’implémentation commence à initialiser la variable dans une autre unité de traduction (a.cpp
)?
Réponses:
1 pour la réponse № 1L’initialisation des globales dans une unité de traduction est dans l’ordre de définition, donc a, b, c
et d, e, f
.
Mais ce n'est pas précisé si c'est a, b, c
et alors d, e, f
ou si c'est l'inverse.
Ou même dans un ordre entrelacé (par exemple, a, d, b, c, e, f
), bien que je pense que la plupart des implémentationsinitialisera toutes les variables globales d’une unité de traduction sur une seule ligne. Par conséquent, mis à part le multithreading, je ne pense pas que cela se produira dans la pratique.
0 pour la réponse № 2
Non, séquence indéterminée signifie qu'ilsse produire dans un certain ordre, mais cet ordre n'est pas spécifié. Les variables d'une unité de traduction seront initialisées avant ou après les variables de l'autre.