J'ai entendu dire que l'avantage d'utiliser les listes d'initialisation dans le constructeur serait qu'il n'y aurait pas de copies supplémentaires des objets de type classe. Mais qu'est-ce que cela signifie pour le code suivant dans le constructeur de la classe T? Si je commente l'affectation et utilise les listes d'initialisation, quelle serait la différence?Listes d'initialisation dans le constructeur
#include <iostream>
using std::cout;
using std::endl;
using std::ostream;
class X {
public:
X(float f_x = 0, float f_y = 0):x(f_x), y(f_y) {}
~X() {}
X(const X& obj):x(obj.x), y(obj.y) {}
friend ostream& operator << (ostream &os, X &obj);
private:
float x;
float y;
};
ostream& operator << (ostream &os, X &obj)
{ os << "x = " << obj.x << " y = " << obj.y; return os;}
class T {
public:
T(X &obj) : x(obj) { /* x = obj */ }
~T() { }
friend ostream& operator << (ostream &os, T &obj);
private:
X x;
};
ostream& operator << (ostream &os, T &obj)
{ os << obj.x; return os; }
int main()
{
X temp_x(4.6f, 6.5f);
T t(temp_x);
cout << t << endl;
}
Je ne sais pas si pertinente à votre question, mais vous voudrez probablement T (X const & obj). –
@ K-ballo: Oui j'ai oublié ça, merci. – user767451