Ich lese, dass die Vorlage copy-con ist nie Standard-Kopie-Konstruktor, und Vorlage Zuweisung-op ist nie ein Kopie Zuweisungsoperator.Kopieren Konstruktor der Vorlage Klasse
Ich konnte nicht verstehen, warum diese Einschränkung notwendig ist, und gerade ging online ideone und zurück ein test program aber hier Copy-Konstruktor nie weiter aufgerufen wird auf googeln ich über templatized Konstruktor kam und versuchte, das aber noch nie Anrufe Copy-Konstruktor .
#include <iostream>
using namespace std;
template <typename T> class tt
{
public :
tt()
{
std::cout << std::endl << " CONSTRUCTOR" << std::endl;
}
template <typename U> const tt<T>& operator=(const tt<U>& that){std::cout << std::endl << " OPERATOR" << std::endl;}
template <typename U> tt(const tt<U>& that)
{
std::cout << std::endl << " COPY CONSTRUCTOR" << std::endl;
}
};
tt<int> test(void)
{
std::cout << std::endl << " INSIDE " << std::endl; tt<int> a; return a;
}
int main() {
// your code goes here
tt<int> a ; a = test();
return 0;
}
Kann jemand erklärt mir den ganzen Grund für diese Einschränkung setzen und auch, wie eine Kopie Konstruktor der Template-Klasse zu schreiben.
Dank
[Copy-elision.] (Http://stackoverflow.com/questions/12953127/what-are-copy-elision-and-return-value-optimization) – 0x499602D2
Es gibt keinen "Standard-Kopierkonstruktor". Es gibt nur * einen * Kopierkonstruktor. Eine Vorlage ist es nie. –
Ich bearbeitet Code und lief es in ideone, aber immer noch kopieren Konstruktor nicht aufgerufen werden. aber ich verstehe auch nicht Grund hinter dieser Einschränkung – anonymous