【问题标题】:Argument dependant Name Lookup in C++ : point from n3290 DraftC++ 中的参数依赖名称查找:来自 n3290 Draft
【发布时间】:2011-07-28 07:26:38
【问题描述】:

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

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

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

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

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    intchar 等基本类型未在任何命名空间或类中定义。这就是他们的关联列表为空的原因。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多