命名约定 - C ++和C#变量中的下划线是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (32)

_var在类字段中看到变量名是很常见的。下划线是什么意思?是否有所有这些特殊命名约定的参考?

提问于
用户回答回答于

下划线仅仅是一个约定; 而已。因此,它的使用总是与每个人有所不同。以下是我对这两种语言的理解:

在C ++中,下划线通常表示私有成员变量。

在C#中,我通常只会在为公有属性定义底层私有成员变量时才会使用它。其他私有成员变量不会有下划线。尽管如此,这种用法在很大程度上已经到了自动化属性出现的边缘。

之前:

private string _name;
public string Name
{
    get { return this._name; }
    set { this._name = value; }
}

后:

public string Name { get; set; }
用户回答回答于

请不要在C ++中的变量名或参数名之前使用UNDERSCORES!

以下划线或双下划线开头的名称为C ++实施者保留。带有下划线的名称保留供库使用。

如果您在C ++编码标准中进行了阅读,你会在第一页中看到:

“不要过分地命名命名,但要使用一致的命名规则:只有两个必须做的事:a)从不使用”弱势名称“,以下划线开头或包含双下划线的名称;” (p2,C ++编码标准,Herb Sutter和Andrei Alexandrescu)

另外,你可以亲自看到为什么在开发软件时这种下划线的使用可能是灾难性的。

尝试编译一个简单的helloWorld.cpp程序,如下所示:

g++ -E helloWorld.cpp

你会看到在后台发生的一切。这是一个片段:

   ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
   try
     {
       __streambuf_type* __sb = this->rdbuf();
       if (__sb)
  {
    if (__sb->pubsync() == -1)
      __err |= ios_base::badbit;
    else
      __ret = 0;
  }

扫码关注云+社区