Si consideri il seguente programma:Qual è il significato di ellissi in un costruttore di copie?
#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;
}
osservare da vicino i tre punti nel parametro del costruttore di copia sono rimasto davvero sorpreso quando ho provato questo programma. A che cosa serve? Cosa significa?
Che cosa dice la specifica della lingua a riguardo?
So che tre punti sono utilizzati per rappresentare argomenti di lunghezza variabile nelle funzioni variadic come printf()
e scanf()
ecc e anche le macro variadic introdotte dal C99. In C++, se non sbaglio, sono usati nei modelli variadici.
Questo codice è ben formato? Questo costruttore di copie varia può prendere qualsiasi numero di argomenti?
Compila & eseguito bene su g ++ 4.8.1 & MSVS 2010.
Uguale a 'Test (const Test & t, ...)' (nota la virgola) –
Qualsiasi costruttore che può essere chiamato con un valore del tipo in sé e lo prende per riferimento è un possibile costruttore di copia. Il fatto che ulteriori argomenti opzionali possano essere forniti è irrilevante. –
@PiotrSkotnicki: Quindi, perché la virgola non è necessaria? – Destructor