名称查找和声明点概念
Name lookup and point of declaration concepts
我对point of declaration
和name-lookup
概念之间的正式耦合感兴趣。特别是,当nested-name-specifier
表示命名空间时,非限定名称查找会生成一组声明,如下所示:N4296::3.4.3.2 [namespace.qual]
对于命名空间
X
和名称m
,命名空间限定的查找集S(X,m)
定义如下:让S0(X,m)
成为所有人的集合X
中的m
声明和内联命名空间集X
(7.3.1)。如果S0(X,m)
不是空的,S(X,m)
是S0(X,m)
;否则,S(X,m)
是 由 using 指令指定的所有命名空间Ni
S(Ni,m)
联合 及其内联命名空间集X
。
让我举几个例子:
1.
#include <iostream>
namespace A
{
int b = 42;
}
int a = A::a; //Error
namespace A
{
int a = 24;
}
int main(){ std::cout << a << std::endl; }
演示
阿拉伯数字。
#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
声明点应位于使用该名称的点之前。我认为应该明确指定。也许我丢失了指定它的条款......如果是这样,你就不能指出我那个吗?
从 [basic.scope.namespace] (§3.3.6/1) 中,强调我的:
命名空间 成员名称具有命名空间范围。它的潜在范围包括其命名空间从名称点 声明 (3.3.2) 及以上
a
只有在声明后才能在namespace A
中找到。因此,示例 (1) 无效,因为尚未声明a
而示例 (2) 有效,因为它已声明。
相关文章:
- 查找声明为结构类型 C++ 的数组末尾
- 假设声明中某些上下文中需要的名称查找规则是什么
- 哪里定义了查找名称最直接声明的名称查找规则
- 无法转发声明C typedef结构-正在查找其他建议
- C++中成员名称查找和访问声明中的歧义
- 为什么名称查找在找到使用 using 指令隐式声明的实体时不停止?
- 为什么在其他函数中声明的函数不参与参数相关查找?
- 查找已声明但未定义的函数
- 查找声明全局变量的文件
- P/调用,查找/声明函数入口点时遇到问题
- 查找没有定义的方法声明
- 声明一个字符串数组并查找其中的元素数量(openFrameworks)
- 在libclang(Python)中查找特定函数声明的所有引用
- 如何在Visual Studio/C++/.NET中快速查找给定声明所需的头文件
- 3.4.1/6 是否忽略了在函数的参数声明子句中找到的函数中使用的名称的查找?
- 在两个完全相同的名称的名称查找中使用声明的效果
- C++受模板方法声明影响的名称查找
- 名称查找和声明点概念
- using声明如何减少可用于在没有 ADL 的情况下查找的名称
- 在 Clang AST 中查找声明的父级