Cでは、変数を関数内で宣言するとき、
この関数の最初の方に宣言しないとエラーになりました。
関数を書いていて、途中で新しい変数が必要になったときは、
関数の最初の方に戻って宣言をしていましたね。
しかし、C++ではその変数が使われる前でしたら
どこで宣言してもよいことになっています。
便利なように思えますが、これも少し困った問題が
生じることもあります。具体的なサンプルで説明します。
aやnはwhileループ内で宣言されていますのでその外側では 当然見えません。Cではwhileループ内で 変数を宣言することはありませんでした。 でもこれは、わかりやすい間違いの例ですね。 最後の方の2行(coutを含む行)を消して実行すると次のようになります。// わかりやすいエラー #include <iostream.h> int main(void) { cout << "数字を入力してください。" << endl; cout << "0入力で終了します。" << endl; while(1) { int a; static int n = 0; cin >> a; if (a == 0) break; n++; cout << "第" << n << "回の入力は" << a << "です。" << endl; } cout << "n=" << n; //エラー! cout << "a=" << a; //エラー! return 0; }
ところで、どうしてnが、static宣言されているか
わかりますか?もしわからなければ、
C言語編第29章を見てください。
今度は、少し紛らわしい例です。
これはどうでしょうか。iは一見、forループ内で宣言されているようにも
見えます。しかし、これはループ内での宣言とはなりません。
従って左のソースは問題なくコンパイルできます。
上のプログラムを実行するとこのようになります。
forループの外側でもちゃんとiは見えていますね。
Update Jan/05/1997 By Y.Kumei