Eva*_*ran 4 c++ gnu naming-conventions libstdc++
如果我们看看GNU的libstdc ++实现,我注意到在标准类的实现中,各种类的私有成员函数都带有前缀_M_.例如,std::basic_string<>其中一个成员被称为bool _M_is_shared() const;.
我理解为私有成员变量设置某种命名约定的动机.这有助于在视觉上区分类成员和函数局部变量.但我不明白为什么_M_前缀是私有成员函数的首选.
如果我看到一些代码调用的例子:is_shared();基本上只有几个选项:
前两个,都有前缀,所以没有帮助.由于命名空间污染问题,最后一个不会发生在任何理智的实现中.图书馆应该引入的唯一全局变量是标准规定的全局变量.所以这就是问题的症结所在......
由于私人成员职能不公开.无法以任何方式影响派生类.我不认为名称冲突在这里真的是一个问题......基本上这些只不过是一个私有的实现细节.为什么要担心(IMO)丑陋的_M_前缀?标准中有什么东西不允许引入额外的私人成员吗?如果是这样,除非有我遗漏的东西,否则会让我感到愚蠢.
标识符以下划线开头,然后是大写字母,或以两个下划线开头,"保留用于在所有上下文中实现".
这意味着根据某人的程序标准来#define _M_is_shared false破坏库头文件是违法的.如果他们使用更多普通标识符,则在其他有效程序中发生此类名称冲突的风险会更大.