我读过该模板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