2

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

如果嵌套名称说明符中的 :: 范围解析运算符前面没有 decltype 说明符,则查找 :: 之前的名称 仅考虑其特化为类型的名称空间、类型和模板。

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

例如:

#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 是否会被视为命名空间内的限定名称?即我们可以归纳地定义嵌套名称说明符查找的规则。但我在标准中找不到类似的东西。这是真的吗?

4

1 回答 1

2

是的,它是归纳的,我想说它只是从措辞中得出的。首先,让我们根据 的关联性添加完整的括号::

(std::cout) << ((A::B)::j)

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

所以j是由名称限定的A::B。是限定名,所以按照3.4.3查找。

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

于 2014-06-02T12:30:51.923 回答