C++ 全局命名空间中的保留名称
根据我对以下问题的答复,并作为后续行动: 显然,全局名称空间中保留了以“C++ 全局命名空间中的保留名称,c++,token-name-resolution,C++,Token Name Resolution,根据我对以下问题的答复,并作为后续行动: 显然,全局名称空间中保留了以“”开头、后跟大写字母的名称 17.4.3.2.1全局名称[lib.Global.names] 某些名称和函数签名集始终保留给实现: 每个名称包含双下划线(\uu)或以下划线开头,后跟大写字母(2.11)的名称都保留给实现以供任何使用 每个以下划线开头的名称都保留给实现,以用作全局命名空间中的名称。165 165)此类名称也保留在名称空间::std(17.4.3.1)中 在我对第一个问题的回答中,我有一节课是这样的 cla
”开头、后跟大写字母的名称
17.4.3.2.1全局名称[lib.Global.names
]
某些名称和函数签名集始终保留给实现:
- 每个名称包含双下划线(
\uu
)或以下划线开头,后跟大写字母(2.11)的名称都保留给实现以供任何使用
- 每个以下划线开头的名称都保留给实现,以用作全局命名空间中的名称。165
165)此类名称也保留在名称空间::std
(17.4.3.1)中
在我对第一个问题的回答中,我有一节课是这样的
class A
{
private:
vector<int> _Ints;
}
A类
{
私人:
向量积分;
}
在评论中,我被告知\u Ints
标识符调用未定义的行为,因为它是一个保留名称。但是,根据最新的标准草案,成员变量的名称查找使用以下规则:
3.4.3.1班级成员[Class.qual
]
如果限定id的嵌套名称指定人指定了一个类,则在该类(10.2)的范围内查找嵌套名称指定人之后指定的名称,以下列出的情况除外。名称应为
表示该类或其基类的一个或多个成员
对我来说,这意味着任何成员变量都不能成为全局命名空间的一部分,因为它的作用域是类
现在,问题是:
我的理解正确吗?成员变量永远不会违反实现保留名称规则,因为它们不在全局命名空间中?如果我说的不对,有人能解释一下我对查找规则的误解吗?您引用的标准规则规定,以下划线开头,后跟大写字母的标识符是为任何用途保留的,而不仅仅是在全局命名空间中。因此,不允许命名成员变量\u Ints
全局名称空间中保留以下划线开头的标识符,该标识符后面不跟下划线或大写字母。例如,您可以命名成员变量\u ints
,但不能在全局名称空间中命名为\u ints
的全局变量
显然,在全局命名空间中保留了(大写字母)
不可以。它在任何地方都是保留的。再次阅读17.4.3.2.1:
每个名称包含一个双下划线(u)或以下划线开头,后跟一个大写字母(2.11)的,都保留给实现以供任何使用
这根本没有提到“全局名称空间”(全局名称空间仅在后续规则中相关)。\u Int
显然违反了第一条规则:“每个包含
双下划线(u_u)或以下划线开头,后跟
大写字母(2.11)保留给任何
“任何用途”的意思正是它所说的:它可以
是预定义的宏,或在编译器中触发某些特殊行为,
或者编译器作者想要的任何东西。你在哪里并不重要
使用名称,如果您使用它,它是未定义的行为(除非
编译器文档中另有说明)
更一般地说,至少在历史上,编译器是相当松散的,
许多系统标头传统上都包含带有
名称以单下划线开头,后跟小写字母。
最好还是避免这些。(从历史上看,甚至有
名字也没有下划线。我知道我有问题
名称linux
变为1
。看不到下划线,但。。。
但是,除了更改名称之外,您对此无能为力
当冲突发生时。)
更一般地说,下划线在某些字体中显示得不太好,
最好在符号的两端避免使用它们。我习惯于表示“任何目的”,而不是任何范围。为什么该规则在“全局名称”部分下。@重新运行“任意目的”肯定包括在任何范围内声明变量。节名称令人困惑,但重要的是节的文本,这清楚地将保留标识符分为两种类型:保留用于任何用途的标识符和保留在全局名称空间中的标识符。“下划线在某些字体中显示得不太好”-1、l和I在某些字体中看起来相似,所以要避免标识符中的下划线?或者在阅读代码时避免使用这些字体?我同意Steve的观点,下划线是编程中的一个事实,如果你的字体不能呈现它们,那么你就有问题了。(我使用比例字体,但仍然没有问题)尽管如此,我在这方面相当极端——如果我可以避免,我不会在“字体”(或无论如何,文本编辑器设置)中阅读代码,因为“字体”不区分制表符和相等数量的空格。所以我对基本的文本可读性有很高的标准。@SteveJessop的符号不同只是因为一个使用小写字母l,另一个使用数字1不是一个好主意。至于下划线,它们将单词分开(它们类似于空格这一事实并不是什么大问题),但区分\u name
、name
和name
并不比使用x1
、xl
或xO
和x0
好多少。