2017-10-24 10 views
-2

スピーカーは、私は他のどのC++チュートリアルでこれを見たことがないC++の配列の宣言と初期化

int deca['f' + '9' + 2 ] = {0};

を使用して、彼らはそれが何を意味するのか説明していない、と私はしようとしたとき、それを私のコンピュータに実装すると、エラーが表示されました。

参考として、それらはLinux環境にありました。

+5

表示されたエラーは何ですか? – DeiDei

+3

あなたはチュートリアルのリファレンスを共有できますか? –

+3

どのようなエラーがありましたか? [ここでうまくいく](http://coliru.stacked-crooked.com/a/9e0ce8ccd400fc76) – NathanOliver

答えて

2

単純に整数配列Nを宣言し、ゼロに初期化します。 Nが評価するものは、'f' + '9' + 2の式によって決まります。 ASCIIコードページを使用している場合は別のコードページを使用している場合は161と評価されます。すべての文字リテラルは、使用されるエンコードに応じて対応する整数値を持ちます。 ASCIIコードページでは、文字'f'102の数で表され、文字'9'57の値を持ちます。式は102 + 57 + 2となり、これは161に等しくなります。他のコードページでは、これらの文字は他の値を持つことがあります。同等の:

int deca[161] = { 0 }; // If ASCII code page is used 
+1

あなたのシステムがASCIIを使用している場合にのみ当てはまりますが、これは保証されていません(関連する問題を参照)(https://stackoverflow.com/questions/29381067/does-c-and-c-guarantee-the-ascii-of-af- and-af-characters) – Borgleader

+1

@Borgleader確かに。答えを更新しました。 – Ron

+0

あなたは_code_pcode_ではなく_encoding_を意味すると思います。これらの2つの言葉は異なることを意味します。たとえば、マシンは、_encoding_を持つ_コードページ_をサポートする必要はありません。 –