_(单个下划线)是一个有效的C++变量名吗?

Ale*_*son 14 c++ standards variable-names

使用gcc 4.7.2这对我来说很好:

int main()
{
  int _ = 1;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我可以期待这个编译吗?我已经阅读了关于下划线作为前缀答案.但是,如果下划线不是前缀任何东西呢?

小智 14

根据Stroustrup(第3版,第4.9.3节),标识符由一系列字母和数字组成.第一个字符必须是一个字母.下划线字符被视为字母.

所以,是的,它应该是便携式的.

  • 打败你2秒! (3认同)

Bri*_*don 11

名称(标识符)由一系列字母和数字组成.第一个字符必须是一个字母.下划线字符_被视为字母.

来自C++编程语言,第4版.

  • 您可以从该引言推断答案是"是",但这样说会很好. (6认同)

Kei*_*son 11

是的,_是一个有效的标识符,因为它符合语法要求.基本上,标识符由下划线或字母组成,后跟零个或多个其他字符,可以是下划线,字母或数字.(从C++ 2011开始,标识符还可以包含通用字符名称和其他实现定义的字符,但这与您的问题无关.)

但是你可能不应该在自己的代码中使用它,除非你非常小心.

正如这个答案所说,引用2003 C++标准:

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

您的_变量不在全局命名空间中,因此在这种情况下您是安全的,但最好避免定义以下划线开头的任何标识符.

此外,我相信GNU gettext(提供对本地化消息的支持)使用该名称_用于其自身目的.(对于GNU gettext来说,这可能是一个坏主意,但这是一个方便的选择.)