Betrachten Sie das folgende Programm:Was bedeuten Ellipsen in einem Kopierkonstruktor?
#include <iostream>
struct Test
{
int a;
Test() : a(3)
{ }
Test(const Test& t...)
{
std::cout<<"Copy constructor called\n";
a=t.a;
}
int get_a()
{
return a;
}
~Test()
{
std::cout<<"Destructor is called\n";
}
};
int main()
{
Test t;
Test* t1=new Test(t);
std::cout<<t.get_a()<<'\n';
std::cout<<t1->get_a()<<'\n';
delete t1;
}
genau beobachten die drei Punkte in Parameter Copykonstruktor ich wirklich überrascht war, als ich dieses Programm ausprobiert. Was nützt es? Was heißt das?
Was sagt die Sprachspezifikation dazu?
Ich weiß, dass drei Punkte werden verwendet, um mit variabler Länge Argumente in variadische Funktionen wie printf()
und scanf()
etc und auch variadische Makros eingeführt durch C99 darstellen. In C++, wenn ich nicht falsch liege, werden sie in variadischen Vorlagen verwendet.
Ist dieser Code gut gebildet? Ist dieser variadische Kopierkonstruktor beliebig viele Argumente?
Es kompiliert & läuft fein auf g ++ 4.8.1 & MSVS 2010.
Gleiche wie 'Test (konst Test & t, ...)' (beachten Sie das Komma) –
Jeder Konstruktor, der mit einem Wert des Typs aufgerufen werden kann selbst und nimmt es mit Bezug ist eine mögliche Copykonstruktor. Die Tatsache, dass optionale weitere Argumente geliefert werden können, ist unerheblich. –
@PiotrSkotnicki: Also, warum Komma ist nicht notwendig? – Destructor