可能重复:
在 C++ 标识符中使用下划线的规则是什么?
我对标准中的相关部分感兴趣(如果有的话)。
是的,当下划线后跟另一个下划线或大写字母时(即预处理器#defines 或宏),或者如果标识符位于全局命名空间中(第 17.6.4.3.2 节):
某些名称和函数签名集始终保留给实现:
— 每个包含双下划线 _ _ 或以下划线后跟大写字母 (2.12) 的名称都保留给实现以供任何使用。
— 每个以下划线开头的名称都保留给实现用作全局名称空间中的名称。
请注意,第一点意味着如果两个下划线出现在标识符中的任何位置,即使在中间或末尾,名称都是保留的。另外,我会补充(§17.6.4.3.5,强调我的):
不以下划线开头的文字后缀标识符保留用于将来的标准化。
它们不是保留的,for
但您不应该使用它们,因为编译器开发人员可能会使用它们来命名自己的函数,因此它可能与您的函数冲突。因此,如果您使用my_class::_function
那么应该没有错误,但是编写一个全局函数,例如void _function()
可能会使用一个编译器生成一个副本!