Bonjour,
J'ai le code suivant qui compile parfaitement avec g++ (4.4.5 et 4.5.3 avec les options -W -Wall -ansi -pedantic) mais je trouve cela bizarre !
Normalement je devrais pouvoir créer un objet Bar à partir d'un objet Foo ou comme copie d'un autre objet Bar. Mais là, en utilisant un entier, ça marche ! J'imagine que g++ crée un objet Foo en douce lors de la construction de l'objet a.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 struct Foo { Foo(const int& n) : m_foo(n) {}; int m_foo; }; struct Bar { Bar(const Foo& f) : m_foo(f) {}; Foo m_foo; }; int main(void) { Bar a(456); // bizarre que ça marche et que g++ ne me dise rien Foo b(1999); Bar c(b); // ça marche et c'est normal }
J'ai remplacé la liste d'initialisation par une affectation dans le corps du constructeur de Bar et là la compilation échoue.
J'ai eu beau chercher je n'ai pas trouvé de référence à ce comportement. Est-ce dans la norme C++ ? Est-ce un comportement propre à g++ ?
Partager