在C++中通常用某种前缀命名成员变量来表示它们是成员变量而不是局部变量或参数.如果你来自MFC背景,你可能会使用m_foo.我myFoo偶尔也见过.
C#(或者可能只是.NET)似乎建议只使用下划线,如_foo.这是否允许C++标准?
如果我们看看GNU的libstdc ++实现,我注意到在标准类的实现中,各种类的私有成员函数都带有前缀_M_.例如,std::basic_string<>其中一个成员被称为bool _M_is_shared() const;.
我理解为私有成员变量设置某种命名约定的动机.这有助于在视觉上区分类成员和函数局部变量.但我不明白为什么_M_前缀是私有成员函数的首选.
如果我看到一些代码调用的例子:is_shared();基本上只有几个选项:
前两个,都有前缀,所以没有帮助.由于命名空间污染问题,最后一个不会发生在任何理智的实现中.图书馆应该引入的唯一全局变量是标准规定的全局变量.所以这就是问题的症结所在......
由于私人成员职能不公开.无法以任何方式影响派生类.我不认为名称冲突在这里真的是一个问题......基本上这些只不过是一个私有的实现细节.为什么要担心(IMO)丑陋的_M_前缀?标准中有什么东西不允许引入额外的私人成员吗?如果是这样,除非有我遗漏的东西,否则会让我感到愚蠢.