我读到模板 copy-con 永远不是默认的复制构造函数,并且模板赋值操作永远不是复制赋值运算符。
我不明白为什么需要这个限制,并立即上网 ideone 并返回一个测试程序但在这里,复制构造函数永远不会在进一步谷歌搜索时被调用,我遇到了模板化构造函数并尝试过,但它仍然从不调用复制构造函数。
#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;
}
有人可以向我解释一下施加此限制的全部原因以及如何编写模板类的复制构造函数。
Thanks
我无法评论为什么会这样,但以下是为类模板编写复制构造函数和赋值运算符的方法:
template <class T>
class A
{
public:
A(const A &){}
A & operator=(const A& a){return *this;}
};
就是这样。
这里的技巧是即使A
是一个模板,当您在类中将其引用为A
(例如在函数签名中)它被视为完整类型A<T>
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)