0

标准最美妙的地方在于有这么多。与CLI-Standard (5th edition)相比,阅读C++11 标准时,我对标识符命名有点困惑。

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

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

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

4

2 回答 2

1

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

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

于 2012-05-15T14:44:28.033 回答
1

一个复杂的问题是第 2.2 节说:

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

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

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

于 2012-05-15T15:17:55.577 回答