Ainsi, la norme C++ exige que les membres de classe soient initialisés dans l'ordre dans lequel ils sont déclarés dans la classe plutôt que dans l'ordre dans lequel ils sont mentionnés dans la liste d'initialisation du constructeur. Cependant, cela n'implique rien dans l'ordre dans lequel les arguments de ces initialisations sont évalués. Je travaille avec un système qui passe fréquemment des références aux objets de sérialisation, et je me demande si je peux m'assurer que les bits sont lus dans le bon ordre, indépendamment de l'ordre dans lequel ces bits sont écrits dans les champs de l'objet.Liste d'initialisation * argument * ordre d'évaluation
struct Foo {
int a;
double b;
// I want to be able to do this
Foo(SerObj &s)
: b(s.readDouble()), a(s.readInt())
{ }
// Rather than this
Foo (SerObj &s)
{
b = s.readDouble();
a = s.readInt();
}
};
De toute évidence, les choses comme réordonnancement ints
et doubles
dans la déclaration est pas trop gros problème, mais plus gros objets et les choses qui nécessitent une allocation dynamique peut parfois être.
J'ai d'abord manqué que les commandes sont différentes, hehe :) –