-5

在这里,我测试检查一个由“typename D”定义的var,是一个不合格的依赖名称。答案是肯定的。因为如果我把它的定义写两次:

template<typename D>
class A { 
   D d_field;
   D d_field;

   void func() { d_field = 1000; } 
 }

 int main()
 {
    return 0;
 }

g++ 会报重定义错误。以便它演示在模板定义中检查了“d_field”。

如果我给出一个类型“double*”来使用这个模板。模板实例化发生,func2 报错,“int can't be convert to double*”。

template<typename D>
class A { 
   D d_field;

   void func() { d_field = 1000; } 
 }

 int main()
 {
    A<double*> a; 
    a.func(); 
    return 0;
 }

它证明“d_field”将在模板实例化中被检查。

另外,我改成下面这样,g++就可以编译好了。证明gcc是基于c++标准的两阶段查找工作... .

template<typename D>
class A { 
   D:: d_field;
   D:: d_field;

   void func() { d_field = 1000; } 
 }

 int main()
 {
    return 0;
 }

总之,使用模板参数在模板中定义一个变量,该变量的名称是一个不合格的从属名称。

这样对吗?

4

1 回答 1

2

不。变量的名称是本地声明的名称,因此它既不依赖也不依赖。只有编译器必须在模板之外查找的名称才能依赖或不依赖。

于 2013-01-29T14:08:23.527 回答