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