标识符是否以根据最新C ++标准保留的下划线开头?

时间:2012-10-16 22:11:05

标签: c++ c++11 standards

  

可能重复:
  What are the rules about using an underscore in a C++ identifier?

我对标准中的相关部分感兴趣(如果有的话)。

2 个答案:

答案 0 :(得分:8)

是的,当下划线后跟另一个下划线或大写字母(即预处理器#defines或宏),或者标识符在全局命名空间(第17.6.4.3.2节)中时:

  

某些名称和功能签名集始终保留给实现:

     

- 包含双下划线_ _或以下划线后跟大写字母(2.12)开头的每个名称都保留给实现以供任何使用。

     

- 以下划线开头的每个名称都保留给实现,以用作全局命名空间中的名称。

请注意,第一点意味着如果两个下划线在标识符中出现 where ,即使在中间或末尾,也会保留名称。另外,我想补充(§17.6.4.3.5,强调我的):

   以下划线开头的后缀标识符保留用于将来的标准化。

答案 1 :(得分:0)

它们不像for那样保留,但您不应该使用它们,因为编译器开发人员可能会使用它们来命名自己的函数,因此它可能与您的函数冲突。因此,如果您使用my_class::_function,那么应该没有错误,但编写像void _function()这样的全局函数可能会生成一个编译器的副本!