首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >名称查找和声明点概念

名称查找和声明点概念
EN

Stack Overflow用户
提问于 2015-01-27 04:41:34
回答 1查看 34关注 0票数 0

我对point of declarationname-lookup概念之间的正式耦合感兴趣。特别是,当nested-name-specifier表示名称空间时,非限定名称查找会生成一组声明,如下所示:N4296::3.4.3.2 [namespace.qual]

对于名称空间X和名称m,命名空间限定查找集S(X,m)的定义如下:让S0(X,m)成为Xm的所有声明集和X的内联命名空间集(7.3.1)。如果S0(X,m)不是空的,则S(X,m)S0(X,m);否则,S(X,m)是由X中的-指令及其内联命名空间集指定的所有命名空间NiS(Ni,m)的联合。

让我举几个例子:

1.

代码语言:javascript
复制
#include <iostream>

namespace A
{
    int b = 42;
}

int a = A::a; //Error

namespace A
{
    int a = 24;
}

int main(){ std::cout << a << std::endl; }

演示

2.

代码语言:javascript
复制
#include <iostream>

namespace A
{
    int b = 42;
}

namespace A
{
    int a = 24;
}

int a = A::a; //OK

int main(){ std::cout << a << std::endl; }

演示

我所提供的规则与声明概念的要点无关,但事实上我们可以看到它是这样的。因此,标准隐含地假定名称的m声明点应该位于使用名称的点之前。我认为应该明文规定。也许我失去了规定的条款..。如果是的话,你就不能指给我看那个吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-27 04:56:15

来自basic.scope.namespace,重点是我的:

名称空间成员名具有命名空间范围。它的潜在作用域包括名称的声明点(3.3.2)开始的的名称空间

只有在声明a后才能在namespace A中找到它。所以示例(1)是无效的,因为a还没有被声明,而例(2)是有效的,因为它是。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28163389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档