在C ++类成员名称中使用下划线的惯例

时间:2011-07-26 04:15:55

标签: c++ class-design

我的大部分编程知识都是自学成才的,所以我从来没有教过适当的设计模式,约定等等。

我最近一直在挖掘我公司的很多软件库,我注意到很多班级数据成员的名字都有下划线。

例如:

class Image
{
// various things

// data members
char* _data;
ImageSettings* _imageSettings;
// (and so on...)
};

我在很多在线示例代码中也看到了这一点。这个惯例背后有原因吗?对不起,我无法提供更好的例子,我真的想记住我的头脑,但我看到了很多。

我知道匈牙利符号,但我试图掌握用于C ++ OOP编程的所有其他约定。

7 个答案:

答案 0 :(得分:5)

它只是想明确哪些变量是成员,哪些不是。没有更深层的含义。在实现成员函数时,混淆的可能性较小,您可以选择更简洁的名称。

void Class::SomeFunction() {
    int imageID;
    //...
    SetID(imageID + baseID); //wait, where did baseID come from?
}

就我个人而言,我把下划线放在最后而不是开头[如果你意外地跟着一个带有大写字母的前导下划线,那么你的代码就会形成错误]。有些人会mBlahm_Blah。其他人什么都不做,并且在混淆可能时明确使用this->blah来表示他们的成员变量。没有全球标准;为私人项目做你想做的事,并坚持其他地方的现有做法。

答案 1 :(得分:4)

我看到_在会员面前打字,只是为了通知读者这是类成员变量

我看到的更传统的方式是m_;即m_data;

答案 2 :(得分:3)

通常在成员使用成员之前使用下划线。

在语言方面很有用,它没有内置的方法来声明成员私有,比如python。

答案 3 :(得分:1)

我认为没有通用的命名规则。但是,最重要的一个是坚持您公司/项目中已经使用的内容。不要打破它。否则,您的技术主管或导师最有可能会向您提出挑战。

供您参考,Google C++ style for naming

答案 4 :(得分:1)

通常在成员变量中使用下划线,以便区分成员变量,静态成员变量&局部变量。

m_用于普通成员变量&
s_用于静态成员变量

这样变量的范围在变量名称中可见。


此外,有时会在成员名称中使用下划线,以便您可以使用成员名称本身命名getset方法。

例如:

class Image 
{ 
    // various things  
    // data members 
    char* _data; 
    ImageSettings* _imageSettings; 
    // (and so on...) 
    public: 
    ImageSettings* imageSettings()
    {
        //return pointer
    }
    void imageSettings(ImageSettings *ptr)
    {
        //set member variable value
    }
}; 

然而,不同的组织采用不同的惯例和编码风格,一个应该坚持下去。遵循原则,
在罗马时思考&像罗马人一样:)

答案 5 :(得分:0)

我所学到的是在变量之前或之后使用下划线意味着它是该类的成员 - 私有,公共或受保护。

答案 6 :(得分:0)

此约定的原因是以下划线开头的成员名称首先出现在Intellisense中。通常,您必须遵循您要贡献的项目惯例。如果您要开始一个新项目,最好遵循一个普遍接受的惯例,例如Sutter和Alexandrescu的C++ Coding Standards