template参数定义的变量名称是非限定依赖名称

时间:2013-01-29 13:58:46

标签: c++ templates

在这里,我测试检查由“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无法转换为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;
 }

总之,使用模板参数在模板中定义变量,变量的名称是非限定的从属名称。

是吗?

1 个答案:

答案 0 :(得分:2)

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