什么是通过名称查找关联的"标识符"?

时间:2016-02-23 07:16:24

标签: c++ templates

所以我正在阅读C ++标准中的这个段落

  

14.6.2.2 [temp.dep.expr] / 3

     

如果id-expression包含

,则它依赖于类型      
      
  • 通过名称查找与一个或多个使用依赖类型声明的声明相关联的标识符
  •   
  • ...
  •   

任何人都可以解释该术语的确切含义" 通过名称查找关联的标识符" ? ,它是在谈论ADL还是什么?

1 个答案:

答案 0 :(得分:2)

它表示在执行名称查找后,现在与该名称的一个或多个声明相关联的标识符。可以将其视为一个名称的一对多映射,它可以引用一组声明。如果存在多个关联声明(例如函数重载),则只有在执行了名称查找(和关联)后才会执行重载解析。

现在,至于你引用的内容。依赖类型表示依赖于当前模板实例化的类型。所以,例如,如果我们有

template<class T> struct A {
    A<T> a1; // A<T> is a dependent type
    A<T*> a2; // A<T*> is not a dependent type
};

在上面的示例中,A<T> 依赖的原因是因为它引用了模板类的当前实例化。但是A<T*>指的是一个不同的实例 - 一个完整的其他类。

所以你的引用基本上是说如果你的模板代码中有一个与使用依赖类型的声明相关联的标识符,那么包含它的 id-expression 本身就是类型依赖的。也就是说,它指的是引用当前实例化的类型。