0

標準について最も美しいのは、非常に多くの標準があることです。C++11 標準をCLI 標準 (第 5 版)と比較して読んでいると、識別子の命名について少し混乱しています。

C++ が[ISO/IEC 14882:2011 ページ 23]に従って許可する場所ASCI: _a-zA-Z0-9(順序に関係なく) および[ページ 1249] に従って [1249 ページ]$多くの Unicode 文字.. (0x24)の定義はありません。一方、[ECMA335 パーティション II ページ 13]ではa-zA-Z0-9_``@$、識別子文字として使用できます。

つまり、C++ は$識別子名内で (0x24) をサポートすべきではありませんが、CLR はサポートすべきです。これをテストすると、正反対のことがわかりました。

それで、真実は何ですか?基準を読んでいるときに何か見落としがありますか? それとも、みんな自分のやりたいことをやっていますか?

4

2 に答える 2

1

複雑なのは、セクション 2.2 が次のように述べていることです。

物理的なソース ファイルの文字は、必要に応じて実装定義の方法で基本的なソース文字セットにマップされます (行末インジケーターに改行文字を導入します)。受け入れられる物理ソース ファイル文字のセットは実装定義です。

$そのため、ソース ファイルの が識別子のドル記号に対応していることは正式にはわかりません。他の何かにマッピングされている可能性があります。

言語標準の要件も、実装が提供しなければならない最低限のものです。すべてのコンパイラは、標準言語に拡張機能を提供します。識別子名に余分な文字を許可することは、おそらく古い標準化前のコードまたは一部の OS 固有の機能をサポートするための拡張機能である可能性があります。

于 2012-05-15T15:17:55.577 に答える
1

CLR を対象とする言語が、CLR 識別子で許可されているすべての文字をサポートする必要がある理由はありません。たとえば、C# では$やなどの文字`を使用できず、それらの一部をコンパイラが生成する識別子に使用します。

CLRまたは通常のアセンブリコードをターゲットにしてC++仕様の文字セットを使用するかどうかに関係なく、C++実装を期待しています。

于 2012-05-15T14:44:28.033 に答える