源于我对C++ 中的对象的动态数组的回答,以及关于在 C++ 标识符中使用下划线的规则是什么?:显然,_
以大写字母开头的名称被保留在全局命名空间中。
17.4.3.2.1 全局名称 [
lib.global.names
]某些名称和函数签名集始终保留给实现:
- 每个包含双下划线 (
__
) 或以下划线后跟大写字母 (2.11) 的名称都保留给实现以供任何使用。- 每个以下划线开头的名称都保留给实现用作全局名称空间中的名称。165
165)此类名称也保留在命名空间
::std
(17.4.3.1) 中。
在我对第一个问题的回答中,我有一个看起来像这样的课程
class A
{
private:
vector<int> _Ints;
}
在评论中,我被告知_Ints
标识符调用未定义的行为,因为它是一个保留名称。然而,根据最近的标准草案,成员变量的名称查找使用以下规则进行:
3.4.3.1 类成员 [
class.qual
]如果qualified -id的nested-name- specifier 指定了一个类,则在该nested-namespeciifier之后指定的名称将在类的范围内查找 (10.2),但下面列出的情况除外。该名称应代表该类或其基类之一的一个或多个成员
对我来说,这意味着任何成员变量都不能成为全局命名空间的一部分,因为它的作用域是类。
现在,问题是:
我的理解是否正确,因为成员变量不在全局命名空间中,所以它们永远不会违反实现保留名称规则?如果我不正确,有人可以解释我对查找规则的误解吗?