初期値の定義が必要な時とそうでないとき
初期化していない変数の値というのは不定(値がどうなってるのかわからない).
で,ある変数の値を用いる処理を実施するタイミングで,その変数の値が「どうなってるのか不明」っていうのだと,まぁ普通は 困る/意図した動作を達成できない/etc... よね,っていうだけの話.
なので「変数の値を使うよりも前の段階でちゃんと値を入れておきましょうよ」と普通は考える.
その手段が「初期化」とか「代入」.
だから,「俺は 絶対に この変数の値を用いるよりも前の段階で何か値を代入するぜ!」っていうコードを書くのであれば,初期化は必須ではない.
C++
1int x; //初期化しないけども…
2...
3x = 42; //まず何か値を代入してから…
4std::cout << x; //xの値を用いるのならば問題無い
あなたのプログラムの場合だと,最初に変数 x と y の値を用いた処理をしているのは
if (x == 0 and y == 0) break;
というところだけど,この時点までにおいて変数 x や y を{初期化しておらず,且つ,一度も値の代入もしていない}としたら,この時点での値は上記の「不定」な状態なわけなので,
そしたら「たまたま両者の値が0だったならばこの if の条件を満たしてしまうし,そうでないならば満たさない」という(予測不能な)動作をすることになる.
で,この if よりも前の段階でこれらの変数に値を入れている処理がありますか? っていうと,該当するのは
std::cin >> x >> y;
になるけども,この処理って必ず成功するわけじゃないよね.
例えば Hello とか何とかてきとーな入力が成された場合はどうなるのか?
入力次第では x や y への値の代入というは行われないかもしれないよね.
……というわけで,このプログラムに関して言えば,
「入力の失敗はあり得ない/そういうイレギュラーは考えない」という前提としても良いという話なのであれば,初期化は無くても良いということになるだろう.
そうでないならば(:あらゆる入力があり得るという前提であれば)変数 x や y には何かしらの 適切な初期値 というのを与えておくとか,あるいは入力処理の失敗を判定して何か手を打つ(:未入力の x や y が用いられないようにする)だとか,相応の対応を入れる必要がある.
2024/09/06 01:04
2024/09/06 01:54
2024/09/06 07:05
2024/09/06 07:28