Soweit ich weiß, muss der Kopierkonstruktor das Format T(const T&)
oder T(T&)
haben. Was, wenn ich der Signatur Standardargumente hinzufügen wollte?Kopierkonstruktor mit Standardargumenten
T(const T&, double f = 1.0);
Wäre das normkonform?
Soweit ich weiß, muss der Kopierkonstruktor das Format T(const T&)
oder T(T&)
haben. Was, wenn ich der Signatur Standardargumente hinzufügen wollte?Kopierkonstruktor mit Standardargumenten
T(const T&, double f = 1.0);
Wäre das normkonform?
Ja.
§ [class.copy]/2:
Ein nicht-Template Konstruktor für Klasse
X
ist eine Kopie Konstruktor wenn erste Parameter vom TypX&
,const X&
,volatile X&
oderconst volatile X&
und entweder Es gibt keine anderen Parameter oder alle anderen Parameter haben Standardargumente [Beispiel:X::X(const X&)
undX::X(X&,int=1)
sind Kopie Konstruktoren.
Sie können nur zwei verschiedene Konstrukteure erstellen:
T(const T&)
T(const T&,double)
jedoch, was Sie haben als Copykonstruktor zulässig.
Nebenbei habe ich festgestellt, dass es in C++ im Allgemeinen keine gute Idee ist, Standardparameter zu verwenden, und es ist stattdessen viel besser, Überladungen zu verwenden, wo diejenigen mit weniger Parametern diejenigen mit mehr Parametern aufrufen, Verwendung von Standardwerten (das ist natürlich nicht möglich mit Konstruktoren in ISO C++ 2003, aber delegierende Konstruktoren sind in ISO C++ 201x erlaubt). Der Grund dafür ist, dass Standardwerte Ihren Funktionen unterschiedliche tatsächliche Signaturen geben als ihr scheinbares Verhalten, was es etwas schwierig/schmerzhaft macht, wenn Sie die Zeiger auf die Funktionen nehmen. Durch die Bereitstellung von Überladungen können Funktionszeiger für jeden möglichen Aufruftyp verwendet werden, ohne dass irgendeine Art von "Bindungs" -Mechanismus erforderlich ist, damit er funktioniert.
Guter Punkt. Die Adresse von überladenen Funktionen zu nehmen ist auch ein Schmerz, IMO, aber es funktioniert zumindest. – UncleBens
Siehe [diese PR] (http://llvm.org/bugs/show_bug.cgi?id=5989) Ich habe vor einiger Zeit für einige Spiele zu kling geschickt, um damit zu spielen. –
http://punchlet.wordpress.com/2009/12/03/letter-the-third/ –