C++ 03中的标识符是否允许使用美元符号?

Gil*_*ili 16 c++ identifier

关于在标识符中使用美元符号,C++标准有何说法Hello$World?他们合法吗?

Kev*_*ney 16

c ++标识符可以由以下任何一个组成:_(下划线),数字0-9,字母az(大写和小写)并且不能以数字开头.

有许多例外,因为C99允许扩展标准(例如视觉工作室).

  • 每个主要的C++编译器都有很多扩展.MS并非独一无二. (15认同)
  • GCC还允许美元符号. (11认同)
  • 在VS中允许它是愚蠢的.MS*总是*必须自己扩展标准... (3认同)
  • 你正在考虑附录E - (规范性的)"标识符的通用字符名称"[extended-id].但是,这会添加更多字母(重音或来自不同的脚本),而不是像$这样的符号. (2认同)
  • 请注意,这仅适用于C++ 03.C++ 11允许标识符中的通用字符名称和实现定义的字符. (2认同)

Nat*_*ath 14

他们是非法的.标识符中唯一合法的字符是字母,数字和_.标识符也不能以数字开头.

  • 仅供参考:虽然标准gcc非法允许,但请参阅http://gcc.gnu.org/onlinedocs/gcc/Dollar-Signs.html#Dollar-Signs (4认同)
  • 这是为了允许向后兼容.它不应该用于任何现代代码. (3认同)

Arn*_*rtz 11

在C++ 03中,前面给出的答案是正确的:它们是非法的.在C++ 11中,情况发生了变化:

这里的答案是"可能":
根据§2.11,标识符可以由数字标识符 - 非数字组成,从后者之一开始.标识符非数字是通常的a-z,A-Z并强调,除了因为C++ 11它们包括通用字符-名称(例如\uBEAF,\UC0FFEE32),和其他执行定义的字符.因此,如果$允许在标识符中使用,则它是实现定义的.VC10及以上版本也支持早期版本.它甚至支持标识符?????.

但是:我不会用它们.使标识符尽可能可读和可移植.$是实现定义的,因此不可移植.


Art*_*yom 8

不合法,但很多(如果不是大多数)编译器支持它们,请注意这可能取决于平台,因此gcc on arm因支持程序集而不支持它们.