我讀過該模板copy-con永遠不會默認複製onstructor,並且模板assignment-op從不是複製賦值運算符。模板類的複製構造函數
我不明白爲什麼需要這個限制,並且馬上去網上ideone並返回一個test program但這裏拷貝構造函數不會被調用關於進一步google搜索,我碰到了模板的構造和嘗試,但仍然是永遠不會調用拷貝構造函數。
#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;
}
有人可以解釋我背後的全部原因,以及如何編寫模板類的複製構造函數。
感謝
[Copy-elision。](http://stackoverflow.com/questions/12953127/what-are-copy-elision-and-return-value-optimization) – 0x499602D2
沒有「默認拷貝構造函數」。只有*一個*拷貝構造函數。模板從來就不是。 –
我編輯的代碼,並在ideone中運行它,但仍然複製構造函數不會被調用。但我也無法理解這個限制背後的原因 – anonymous