我已阅读以下内容(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是否会在命名空间中看作是限定名?即我们可以归纳地定义嵌套名称说明符查找的规则。但我在标准中找不到类似的东西。这是真的吗?
答案 0 :(得分:1)
是的,它是归纳的,而且我只是从措辞中得出结论。首先,让我们根据::
:
(std::cout) << ((A::B)::j)
(以上只是为了演示解析器如何理解优先级,它不是有效代码)。
所以j
由名称A::B
限定。这是一个合格的名称,因此根据3.4.3进行查找。
A::B
本身就是一个限定名称(它符合5.1.1 / 8中概述的句法形式),因此根据限定名称的规则进行查找。