Przeczytałem, że szablon copy-con nigdy nie jest domyślną kopią onstructor, a szablon przypisania-op nigdy nie jest operatorem przypisania kopii.Kopiuj konstruktor szablonu klasy
nie mogłem zrozumieć, dlaczego takie ograniczenie jest potrzebne i od razu poszedł online ideone i zwracają test program ale tutaj skopiować konstruktor nigdy nie jest wywoływana na dalsze googlowania natknąłem templatized konstruktora i próbowałem tego, ale jeszcze nigdy nie domaga skopiować konstruktora .
#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;
}
Może ktoś wyjaśnić mi całą powodem wprowadzenia tego ograniczenia, a także jak napisać konstruktor kopiujący klasy szablonu.
Dzięki
[Copy-elision.] (Http://stackoverflow.com/questions/12953127/what-are-copy-elision-and-return-value-optimization) – 0x499602D2
Nie ma "domyślnego konstruktora kopii". Jest tylko * jeden * konstruktor kopiowania. Szablon nigdy nim nie jest. –
Edytowałem kod i uruchomiłem go w idee, ale wciąż kopiuję konstruktora, nie otrzymuję wywołania. ale nie jestem w stanie zrozumieć przyczyny tego ograniczenia. – anonymous