c++定数式のmsdnページで次のように述べています。
非整数定数は、(明示的または暗黙的に) 整数型に変換して、定数式で有効にする必要があります。したがって、次のコードは有効です。
const double Size = 11.0; char chArray[(int)Size];
少なくとも VC++ 10.0 では、2 行目で「エラー C2057: 定数式が必要です」が生成されます。それで、他のコンパイラでは合法ですか、それともmsdnページは単に間違っていますか?
c++定数式のmsdnページで次のように述べています。
非整数定数は、(明示的または暗黙的に) 整数型に変換して、定数式で有効にする必要があります。したがって、次のコードは有効です。
const double Size = 11.0; char chArray[(int)Size];
少なくとも VC++ 10.0 では、2 行目で「エラー C2057: 定数式が必要です」が生成されます。それで、他のコンパイラでは合法ですか、それともmsdnページは単に間違っていますか?
5.19/1 によると:
整数定数式には、リテラル (2.13)、定数式 (8.5) で初期化された整数型または列挙型の列挙子、変数
const
または静的データ メンバー、整数型または列挙型の非型テンプレート パラメーター、およびsizeof
式のみを含めることができます。浮動リテラル (2.13.3) は、整数型または列挙型にキャストされている場合にのみ表示できます。
私の理解では、コードは無効ですが、以下は合法です:
char chArray[(int)11.0];
標準 C++ によれば、これは合法ではありません。仕様のルールについては、5.19/2 を参照してください。