vc中的一段代码
template <typename T>
class Test
{
public:
Test();
template<>(const Test<T>& r){;}
}
中的 template<>(const Test<T>& r){;}是不是和template<typename T>(const Test<T>&r)等价,
和template<typename Y>(const Test<T>&r)一样吗?
template <typename T>
class Test
{
public:
Test();
template<>(const Test<T>& r){;}
}
中的 template<>(const Test<T>& r){;}是不是和template<typename T>(const Test<T>&r)等价,
和template<typename Y>(const Test<T>&r)一样吗?
template <typename T>
class Test
{
public:
Test(){};
template<typename Y>Test(const Test<Y>& r){ ;};
};和
template <typename T>
class Test
{
public:
Test(){};
template<typename T>Test(const Test<T>& r){ ;};
};
template <typename T>
class Test
{
public:
Test(){};
Test(const Test<T>& r){ ;};
};和template <typename T>
class Test
{
public:
Test(){};
template<>Test(const Test<T>& r){ ;};
};现在楼主明白了吗?
template <typename T>
class Test
{
public:
Test(){};
template<> Test(const Test<T>& r){ ;};
};和template <typename T>
class Test
{
public:
Test(){};
Test(const Test& r){ ;};
};
==================================
这个是什么?能编译通过?
template <typename T>
class Test
{
public:
Test(){cout << "Test()"<<endl;};//0 template<typename Y> Test(const Test<Y>& r){cout << "template<typename Y> Test(const Test<Y>& r)"<<endl;};//1
//template<typename T> Test(const Test<T>& r){cout << "template<typename T> Test(const Test<T>& r)"<< endl;};//2
template<typename Y> Test(const Test<T>& r){cout << "template<typename Y> Test(const Test<T>& r)"<<endl;};//3
Test(const Test<T>& r){cout << "Test(const Test<T>& r)"<< endl;};//4
//Test(const Test& r){cout << "Test(const Test& r)"<< endl;};//5
};int main()
{
Test<int> it; //0
Test<int> it1(it);
Test<double> it2(it);
}gcc
//2编译不通过,
//3不知道什么时候调用???
//4,5一样,都是拷贝构造函数cb5 1,2是一样的
3,4,5都可以做为拷贝构造函数,如果4/5存在的话,会调用4/5,否则调用3vc2003 1,2是一样的,都可以通过编译
4,5是一样的,
4/5不存在的话,调用1
3和5或者3和4同时存在的话,编译会有警告
个人感觉gcc最符合c++