嵌套名称说明符的名称查找规则

时间:2014-06-02 12:02:37

标签: c++ language-lawyer qualified-name

我已阅读以下内容(3.4.3 / 1):

  

如果嵌套名称说明符中的:: scope resolution运算符不是   前面是一个decltype-specifier,查找:: :: />之前的名称   仅考虑其专业化的名称空间,类型和模板   是类型。

嵌套名称说明符的查找规则是什么?

例如:

#include <iostrem>

namespace A
{
    int j=5;
}

int main()
{
    std::cout << A::j //I assume that A will be searched as just *unqualified-name* appeared inside the function which is a member of namespace
}

第二个例子:

namespace A
{
    namespace B
    {
        int j=5;
    }
}

int main()
{
    std::cout << A::B::j
}

在第二个例子中,A :: B是否会在命名空间中看作是限定名?即我们可以归纳地定义嵌套名称说明符查找的规则。但我在标准中找不到类似的东西。这是真的吗?

1 个答案:

答案 0 :(得分:1)

是的,它是归纳的,而且我只是从措辞中得出结论。首先,让我们根据::

的相关性添加完整的括号
(std::cout) << ((A::B)::j)

(以上只是为了演示解析器如何理解优先级,它不是有效代码)。

所以j由名称A::B限定。这是一个合格的名称,因此根据3.4.3进行查找。

A::B本身就是一个限定名称(它符合5.1.1 / 8中概述的句法形式),因此根据限定名称的规则进行查找。