什么是ISO14882和ECMA335标准的有效标识符?

时间:2012-05-15 14:38:24

标签: c++ clr standards native

关于标准最美的是有很多。在阅读C++11 standardCLI-Standard (5th edition)相比时,我对标识符感到有些困惑命名。

C ++允许根据 [ISO / IEC 14882:2011第23页] ASCI:_a-zA-Z0-9(无论顺序如何)并根据 [第1249页] A很多unicode字符.. $(0x24)没有定义。另一方面, [ECMA335 partition II page 13] 允许a-zA-Z0-9_``@$作为标识符字符。

换句话说,C ++不应该在标识符名称中支持$(0x24),但CLR应该。在测试时,我注意到完全相反:

那么真相是什么?我在阅读标准时遗漏了什么?或者每个人都在做他想做的事情?

2 个答案:

答案 0 :(得分:1)

目标CLR的语言没有理由支持CLR标识符中允许的所有字符。例如,C#不允许使用$`等字符,并将其中一些用于编译器生成的标识符。

我期望C ++实现,无论它是针对CLR还是普通汇编代码来使用C ++规范中的字符集。

答案 1 :(得分:1)

复杂的是2.2节说:

  

物理源文件字符以实现定义的方式映射到基本源字符集(如果需要,引入行尾指示符的换行符)。接受的物理源文件字符集是实现定义的。

因此,我们正式不知道源文件中的$对应于标识符中的美元符号。它可能被映射到其他东西。

语言标准中的要求也是实施必须提供的最低要求。所有编译器都提供标准语言的扩展。允许标识符名称中的额外字符可能是这样的扩展,可能支持旧的预标准代码或某些特定于操作系统的功能。