246 votes

Constructeur d'initialisation-liste d'ordre d'évaluation

J'ai un constructeur qui prend des arguments. J'avais supposé qu'ils ont été construits dans l'ordre indiqué, mais dans un cas, il apparaît qu'ils ont été en cours de construction dans le sens inverse entraînant un abandon. Quand j'ai inversé les arguments du programme arrêté à l'abandon. Ceci est un exemple de la syntaxe que j'utilise. La chose est, a_ doit être initialisée avant b_ dans ce cas. Pouvez-vous garantir l'ordre de la construction?

par exemple

class A
{
  public:
    A(OtherClass o, string x, int y) :
      a_(o), b_(a_, x, y) { }

    OtherClass a_;
    AnotherClass b_;
};

272voto

AraK Points 38702

Il dépend de l'ordre de déclaration de variable membre de la classe. Donc, a_ sera la première, b_ sera la deuxième, dans votre exemple.

191voto

GManNickG Points 155079

Pour citer la norme, pour la clarification:

12.6.2.5

L'initialisation doit procéder dans l'ordre suivant:

...

  • Alors, non membres de données doit être initialisé dans l'ordre où ils ont été déclarés dans la définition de classe (encore une fois quel que soit l'ordre de la mem-initialiseurs).

...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X