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)一样吗?

解决方案 »

  1.   

    下面两种写法是一样的:
    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){ ;};
      };
      

  2.   

    下面两种写法是也一样的:
    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){ ;};
    };现在楼主明白了吗?
      

  3.   

    下面两种写法是一样吗:
    template <typename T>
    class Test
    {
    public:
    Test(){};
    template<> Test(const Test<T>& r){ ;};
    };和template <typename T>
    class Test
    {
    public:
    Test(){};
    Test(const Test& r){ ;};
    };
      

  4.   

    template<>(const Test<T>& r){;}
    ==================================
    这个是什么?能编译通过?
      

  5.   

    昨晚做了一个测试,源码和结果如下:
    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++
      

  6.   

    另外tempalte<> Test(const Test<T>& r){cout << "Test(const Test<T>& r)"<< endl;};不能通过编译