これは本当ですか ?
1. const 修飾子を単独で使用すると、デフォルトで int になります。例えば、
const size = 10;
意味
const int size =10;
2.ANSI C は、const の初期化子を必要としません。何も指定されていない場合、const を 0 に初期化します。たとえば、
const int i;
意味
const i = 0;
答えてください。ANSI規格による
これは C89/90 に当てはまります。これは、C99 または C++ には当てはまりません。"implicit int" ルールは C99 では禁止されており、C++ には存在しませんでした。
でも、
const size 10;
は有効な C 構文ではありません。は=
引き続き必要です。C の非常に古い標準化前のバージョン (CRM C と呼ばれる) は、初期化構文を使用せず=
に を使用していましたが、そのバージョンの言語にはconst
まだ含まれていませんでした。
違います。C および静的ストレージ期間を持つオブジェクトは、デフォルトでゼロ初期化されます。これは、たとえば、ファイル スコープオブジェクトは、ゼロであるかどうかに関係なく、デフォルトでゼロ初期化されることを意味しますconst
。ローカル変数は、ゼロ初期化されているかどうかに関係なく、デフォルトではゼロ初期化されていconst
ません。つまり、この問題は とはまったく関係ありませんconst
。
C++ も同様の仕様を実装しています。静的ストレージ期間を持つすべてのオブジェクトは、他の初期化が行われる前にゼロで初期化されます。
標準(C99、C ++または以前のCバージョンをチェックしていません)によると、これらはどちらも当てはまりません。
宣言の文法定義(セクション6.7)を見ると、型指定子はオプションではないことがわかります。
デフォルトの初期化(セクション6.7.8)では、次のことがわかります。
自動保存期間を持つオブジェクトが明示的に初期化されていない場合、その値は不確定です。静的ストレージ期間を持つオブジェクトが明示的に初期化されていない場合、次のようになります。
..。
- 算術タイプの場合、(正または符号なし)ゼロに初期化されます。
..。
ここについては何もありませんconst
。
http://ideone.com/kl9CZいいえ、そうではありません。
C は defaultint
を許可していましたが、1999 年までは禁止されていました。昔、int
MSVC 2003 の C++ では変数のデフォルトが設定されていましたが、標準の C++ では、言語が標準化されて以来、これは違法でした。実際、あなたのコードを最近のバージョンの MSVC に入力すると、次のエラー メッセージが表示されます。
エラー C4430: 型指定子がありません - int と見なされます。注: C++ は default-int をサポートしていません
私の知る限り、=
C や C++ では を除外することは決して合法ではありませんでした。
C および C++ が変数をゼロにゼロ初期化する場合がいくつかint a = int();
ありますが、それらは の行に沿って何かがあり、グローバル/静的がゼロ初期化される場合です。あなたのコードでは、(それらが関数にある場合) C も C++ もそれらの変数をゼロ初期化しません。