1

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

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

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

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

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

[注意:非类型模板参数不参与关联命名空间的集合。——尾注]

任何人都可以用一个例子来解释这个......请

在上面的陈述中,“命名空间和类的集合都是空的”..这怎么可能?

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

4

1 回答 1

6

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

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

于 2011-07-28T07:33:12.737 回答