Bonjour
En testant certains points des constructeurs de copie je suis tombé sur un petit mystère:
J'ai compilé en -fno-elide-constructors sous g++ 3.3.3 pour être bien sûr de voir passer toutes les copies avant que le compilateur ne s'amuse à les optimiser.
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
16 class A { int value; public: A(int i) { value = i; cout << "A(int)" << endl; } A(A& other) { // const volontairement absent value = other.value; cout << "A(A&)" << endl; } }; A a1(1), a2(a1); // ok A a3(*(new A(3))); // ok A a4(A(4)); // ne compile pas
Le message d'erreur est:
Si je modifie le constructeur de copie en A(const A& other) le code compile et produit bien le résultat attendu (A(int), A(const A&) et a4.value = 4 au final).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 error: no matching function for call to 'A::A(A)' error: candidates are: A::A(int) error: A::A(A&)
Je suis perplexe... Quelqu'un peut expliquer pourquoi?
Partager