J'ai un constructeur qui prend quelques arguments. J'avais supposé qu'ils ont été construits dans l'ordre indiqué, mais dans un cas, il semble qu'ils étaient construits à l'envers, ce qui a entraîné un avortement. Lorsque j'ai inversé les arguments, le programme a cessé d'interrompre. Ceci est un exemple de la syntaxe que j'utilise. Le fait est que a_ doit être initialisé avant b_ dans ce cas. Pouvez-vous garantir l'ordre de construction?
par exemple
class A
{
public:
A(OtherClass o, string x, int y) :
a_(o), b_(a_, x, y) { }
OtherClass a_;
AnotherClass b_;
};
Réponses:
Cela dépend de l'ordre de déclaration des variables membres dans la classe. Ce
a_
sera le premier, puisb_
le second dans votre exemple.la source
-Wreorder
dans gcc.Pour citer la norme, pour clarification:
la source
La référence standard pour cela semble maintenant être la section 13.3 de la section 12.6.2:
la source