Are dollar-signs allowed in identifiers in C++03? 涵盖了在C++03中不允许在标识符中使用美元符号。GCC将其作为C扩展提供,并在C++03模式下适当地给出诊断。但是,在C++11中,int $ = 0
将编译而不会发出警告。
这个答案认为可能允许使用$
,因为实现定义的标识符不需要进行诊断:
这里的答案是"可能":根据§2.11,标识符可以由数字和标识符非数字组成,以后者之一开头。标识符非数字通常是
a-z
、A-Z
和下划线,自C++11以来还包括 通用字符名(例如\uBEAF
、\UC0FFEE32
),以及其他实现定义字符。因此,在标识符中使用$
是否允许是实现定义的。VC10及以上版本支持该功能,也可能支持更早版本。它甚至支持像こんばんわ
这样的标识符。但是:我不会使用它们。使标识符尽可能易读和可移植。
$
是实现定义的,因此不可移植。
这个语言也出现在C++03标准中,因此我认为这不是一个非常令人信服的论点。
§2.10/2
此外,一些标识符为C++实现和标准库(17.6.4.3.2)所保留,不得以其他方式使用;不需要发出诊断。
标准中的哪些变化允许将$
用作标识符名称?
$
。他们将其移动到预处理器选项,唯一的描述是接受标识符中的‘$’
。 - user3920237