C ++中依赖于参数的名称查找:指向n3290草案

时间:2011-07-28 07:26:39

标签: c++ namespaces c++11 name-lookup

来自ISO C ++ DRAFT n3290:依赖于参数的名称查找:第3.4.2节,第2段,

  

对于函数调用中的每个参数类型T,有一组零或更多    关联的命名空间和一组零个或多个关联的类    考虑。命名空间和类的集合完全由    函数参数的类型(以及任何模板模板的命名空间)    参数).Typedef names和using-declaration用于指定类型do    没有贡献这个集合。确定名称空间和类的集合    通过以下方式:

     

- 如果T是基本类型,则其关联的命名空间和类集合是      都是空的。

     

- 如果T是类类型(包括联合),则其关联的类是:类      本身;它所属的成员,如果有的话;及其直接和间接的      基类。其关联的命名空间是其名称空间      关联类是成员。

     

此外,如果T是类模板      特化,其相关的命名空间和类还包括:      与模板参数类型相关联的名称空间和类     提供模板类型参数(模板模板参数除外);     任何模板模板参数都是成员的名称空间;和     用作模板模板参数的任何成员模板的类是
    成员。

     

[注意:非类型模板参数对a的集合没有贡献      关联的命名空间。 - 结束说明]

任何人都可以根据一个例子来表达这个......请

在上面的语句中“命名空间和类的集合都是空的”..这可能吗?

在第二点,他说更多......请任何人解释一下吗?

1 个答案:

答案 0 :(得分:6)

基本类型(如intchar)未在任何名称空间或类中定义。这就是为什么他们的关联列表将是空的。

如果函数参数是从模板创建的类型,则不仅要考虑此模板的名称空间,还要考虑其模板参数的名称空间。例如,如果您有std::vector<foo::bar>作为参数,那么名称空间集将同时包含stdfoo