问个非常深沉的有关问题,相同的名字为什么不同

问个非常深沉的问题,相同的名字为什么不同?templatetypename T class Btemplatetypename T class A {

问个非常深沉的问题,相同的名字为什么不同?


template<typename T> 
class B; 
 
template<typename T> 
class A 

public: 
    A(const A &a);  //非限定名,等价于A(const A<T> &a); 
    B<T> *p;        //必须指定类型参数 
}; 


大家看上面两个类,类B和类A都使用了T,那两个类的T是不是同一个T?
[解决办法]
引用:

template<typename T> 
class B; 
 
template<typename T> 
class A 

public: 
    A(const A &a);  //非限定名,等价于A(const A<T> &a); 
    B<T> *p;        //必须指定类型参数 
};


大家看上面两个类,类B和类A都使用了T,那两个类的T是不是同一个T?

你要想用不同的,就得这么做
template<typename T,typename F> 
class A 

public: 
    A(const A &a);  //非限定名,等价于A(const A<T> &a); 
    B<F> *p;        //必须指定类型参数 
};

这不是合乎常理么