以下划线(_)为前缀的类成员

Pat*_* B. 9 c++ linker naming-conventions

在我们的项目中,我们决定使用下划线为成员变量和一些私有/受保护方法添加前缀(因此使用" _").

在讨论期间,有人声称这是不鼓励的,因为某些平台上的某些编译器/链接器存在某些不兼容性.因为我们希望尽可能便携,所以我想确定.

我还认为在C中用下划线加上前缀全局变量可能是个问题.

这同样适用于C++ - 链接,如果适用,在哪些情况下(平台/编译器/链接器)?

Dav*_*eas 12

来自C++ 03标准:§17.4.3.1.2/ 1

某些名称和函数签名集始终保留给实现:

  • 每个包含双下划线(__)或以下划线开头,后跟大写字母(2.11)的名称保留给实现以供任何使用.

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

等效文本存在于C++11§17.6.4.3.2/ 1中

  • +1.换句话说,OP的使用是安全的,*只要*那些成员不以大写字母开头.但是我建议一般不要使用领先的下划线,因为它太容易意外破坏这里显示的规则之一. (8认同)
  • 这些是官方规则.在过去,我遇到系统头文件中的宏问题,这些宏也匹配以下划线后跟一个小写字母开头的名称.作为一般规则,为了便于阅读,请避免在符号的任何一端使用下划线. (3认同)

Off*_*rmo 5

就个人而言,我用m_name'm'代表'会员'.

顺便说一句,我也在p_我的函数和g_少数不可避免的全局变量中使用参数.

(然后我经常被SO用户抨击,因为它看起来像匈牙利表示法;-)但它不是.)

  • @mlvljr感谢这个建设性的评论,帮助我和社区;)这不是匈牙利的符号,但被教导"匈牙利符号是坏的"并且不假思索地运用这个规则的人就是这样. (3认同)
  • 没有下划线,pFoo,mFoo,gFoo,我更喜欢这个 (2认同)