什么是ISO14882和ECMA335标准的有效标识符
What are valid Identifiers for ISO14882 and ECMA335 standards?
标准最美的是有这么多。在阅读 C++11 标准与 CLI 标准(第 5 版(相比时,我对标识符命名有点困惑。
C++根据 [ISO/IEC 14882:2011 第 23 页] ASCI:_a-zA-Z0-9
(无论顺序如何(和 [第 1249 页] 许多 unicode 字符 .. 没有定义 $
(0x24( 的地方。另一方面 [ECMA335分区 II 第 13 页] 允许a-zA-Z0-9_``@$
作为标识符字符。
换句话说,C++不应支持标识符名称中的$
(0x24(,但 CLR 应支持。在测试这个时,我注意到恰恰相反:
- 原生C++(原生MSVC [VS2010 Ultimate],GCC [2.8.1],minGW [最新](支持
$
; - C++\CLI 甚至 C# (MSVC( 都不支持
$
。
那么真相是什么呢?我在阅读标准时遗漏了什么吗?还是每个人都在做他想做的事情?
一个复杂的是,第2.2节说:
如有必要,物理源文件字符以实现定义的方式映射到基本源字符集(为行尾指示符引入换行符(。接受的物理源文件字符集是实现定义的。
所以我们正式不知道源文件中的$
对应于标识符中的美元符号。它只是可能映射到其他内容。
语言标准中的要求也是实现必须提供的最低要求。所有编译器都提供对标准语言的扩展。在标识符名称中允许额外的字符可能是这样的扩展,可能是为了支持旧的试行标准代码或某些特定于操作系统的功能。
面向 CLR 的语言没有理由支持 CLR 标识符中允许的所有字符。例如,C#不允许像$
或`
这样的字符,并使用其中一些字符作为编译器生成的标识符。
我希望有一个C++实现,无论它是针对 CLR 还是普通汇编代码以使用 C++ 规范中的字符集。
相关文章:
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 欧拉项目#8答案是大以获得有效答案
- 调整大小后指向元素值的指针unordered_map有效?
- #ifdef和未声明的标识符
- 为什么是0;C++中的有效语句
- 最高有效数字侧的第N位
- GCC对可能有效的代码抛出init list生存期警告
- 有效地使用std::unordered_map来插入或增加键的值
- c++中O(n^(1/3))中一个数的除数的有效计数
- 使用无符号字符数组有效存储内存
- 自定义先决条件对移动分配运算符有效吗
- f2、f3、f4标识符未找到
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 有哪些有效的方法可以消除一组 100 万个字符串>重复数据?
- 为什么这种直接初始化有效?(C++17)
- 设置 Visual Studio for MPI: 找不到标识符错误
- 宏为模板类静态实例生成有效的标识符
- 什么是ISO14882和ECMA335标准的有效标识符
- 在C++中使用标准库函数名称作为标识符是否有效
- #Import 指令失败并显示错误"Request?"不是有效的C++标识符