模板参数定义的变量名称是非限定的从属名称

the variable's name defined by template parameter is a unqualified dependant name

本文关键字:是非 定义 变量名 参数      更新时间:2023-10-16

在这里,我测试以检查由"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 无法转换为双精度*"。

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;
 }

总之,使用模板参数在模板中定义一个变量,变量的名称是一个非限定的依赖名称。

对吗?

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