8

ここで開始された議論から来て、標準は文字の値を指定しますか? それで、'0'48であることが保証されていますか?それはASCIIが私たちに教えてくれることですが、それは保証されていますか? そうでない場合、'0'48 以外のコンパイラを見たことがありますか?

4

4 に答える 4

16

いいえ。ソース文字セットまたは実行文字セットで ASCII サブセットのエンコードを使用する必要はありません。非 ASCII の実装は見たことがありませんが、持っている人を知っている人は知っています。(「0」~「9」は連続した整数値である必要がありますが、これは SO の別の場所で重複した質問です。)

ソース文字セットに使用されるエンコーディングは、ソース コードのバイトが C++ 言語で使用される文字にどのように解釈されるかを制御します。標準では、実行文字セットのメンバーは値を持つものとして説明されています。の整数値を決定するのは、これらの文字を対応する値にマップするエンコーディングです'0'

少なくとも基本ソース文字セットのすべてのメンバーに加えて、いくつかの制御文字と値ゼロのヌル文字が (適切な値で) 実行文字セットに存在する必要がありますが、エンコーディングが ASCII である必要はありません。文字の特定のサブセット (ヌル文字以外) には ASCII 値を使用します。

于 2012-10-30T15:01:32.007 に答える
11

いいえ、標準では、ソース文字エンコーディングを指定しないように細心の注意を払っています。

C および C++ コンパイラも EBCDIC コンピュータで実行されます'0' != 0x30

しかし、私はそれが必要であると信じてい'1' == '0' + 1ます。

于 2012-10-30T15:01:58.310 に答える
3

それ0xF0はEBCDICにあります。私は EBCDIC コンパイラーを使ったことはありませんが、IBM ではしばらくの間、EBCDIC コンパイラーが大流行していたと言われています。

ソースまたは実行エンコーディングが ASCII ベースであるという C++ 標準の要件はありません。それが保証されてい'0' == '1' - 1ます(そして、一般に、数字が連続して順番に並んでいることが保証されています)。文字が連続しているとは限りません。実際、EBCDIC'J' != 'I' + 1'S' != 'R' + 1.

于 2012-10-30T15:02:19.177 に答える
2

C++11標準N3225によると

基本ソース文字セットのメンバーのグリフは、ASCII 文字セットに対応する ISO/IEC 10646 のサブセットから文字を識別することを目的としています。ただし、ソース ファイルの文字からソースの文字セットへのマッピング (変換フェーズ 1 で説明) は実装定義として指定されているため、基本的なソース文字がソース ファイルでどのように表現されるかを文書化する実装が必要です。

要するに、別の実装について聞いたことがありませんが、文字セットを ASCII テーブルにマップする必要はありません。

于 2012-10-30T15:04:42.100 に答える