来自ISO C ++ DRAFT n3290:依赖于参数的名称查找:第3.4.2节,第2段,
对于函数调用中的每个参数类型T,有一组零或更多 关联的命名空间和一组零个或多个关联的类 考虑。命名空间和类的集合完全由 函数参数的类型(以及任何模板模板的命名空间) 参数).Typedef names和using-declaration用于指定类型do 没有贡献这个集合。确定名称空间和类的集合 通过以下方式:
- 如果T是基本类型,则其关联的命名空间和类集合是 都是空的。
- 如果T是类类型(包括联合),则其关联的类是:类 本身;它所属的成员,如果有的话;及其直接和间接的 基类。其关联的命名空间是其名称空间 关联类是成员。
此外,如果T是类模板 特化,其相关的命名空间和类还包括: 与模板参数类型相关联的名称空间和类 提供模板类型参数(模板模板参数除外); 任何模板模板参数都是成员的名称空间;和 用作模板模板参数的任何成员模板的类是
成员。[注意:非类型模板参数对a的集合没有贡献 关联的命名空间。 - 结束说明]
任何人都可以根据一个例子来表达这个......请
在上面的语句中“命名空间和类的集合都是空的”..这可能吗?
在第二点,他说更多......请任何人解释一下吗?
答案 0 :(得分:6)
基本类型(如int
和char
)未在任何名称空间或类中定义。这就是为什么他们的关联列表将是空的。
如果函数参数是从模板创建的类型,则不仅要考虑此模板的名称空间,还要考虑其模板参数的名称空间。例如,如果您有std::vector<foo::bar>
作为参数,那么名称空间集将同时包含std
和foo
。