質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

234閲覧

C++ 初心者 変数の初期化について

mochiwarabi

総合スコア10

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/04/17 12:39

https://atcoder.jp/contests/apg4b/tasks/APG4b_cj
現在この問題を解いており1度目に書いた答えをコードテストしてみたところとてつもない桁数の出力が行われました。
https://pastebin.com/KGb1tHnF←1度目のコード
そこで答えを見ながらコードを見ると15行目の
int GOU;

int GOU = 0;
間違っており、そこを訂正するとしっかり動きました。
そこで質問なのですが、なぜ変数をいちいち初期化しなければならないのでしょうか。
また、初期化しないとめちゃくちゃな出力が起きる可能性があるのになぜエラーにならないのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

プログラマがいちいち指示して初期化しなければ、コンパイラが勝手に全部(特に指示がなければ0に、とか)初期化することになります。少なくない場合、その処理は「無駄」になります。
C/C++はその無駄をよしとせず、プログラマの責任において必要な初期化を行うことになっています。そういうポリシーの言語だからです。
実際には、コンピュータの性能が低かった1970年代に作られたC言語は、多くを人間に頼っているという言い方も出来なくはないですね。コンピュータの性能をとことん引き出せることの裏返しと言えなくもないかも。

いずれにせよ、なんでも自動でやってくれて、危ないことをしそうになったら助けてくれる仕組みを期待するなら、C/C++を使うのはやめた方がいいです。

投稿2020/04/17 13:00

thkana

総合スコア7639

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そこで質問なのですが、なぜ変数をいちいち初期化しなければならないのでしょうか。
また、初期化しないとめちゃくちゃな出力が起きる可能性があるのになぜエラーにならないのでしょうか。

C++言語は、「できるだけ余計なことをしない」という思想のもとに作られています。なので、ローカル変数については「あとから何かの値を代入するので、初期化はいらない」というのであれば、それを尊重して初期化処理さえも省略してしまうのです(コンストラクタのあるクラス型や、外部変数の場合はまた違いますが)。

投稿2020/04/17 12:45

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/04/17 12:46

なお、警告レベルとコードの書き方によっては、未使用の変数を使っていると警告してくれる場合もあります。
mochiwarabi

2020/04/17 12:51

なるほど そういう物ということなんですね
guest

0

ベストアンサー

エラーにならないのは、歴史上の経緯からそう決まっている、としか言いようがありません。

まあ、有名どころのコンパイラは初期化無しでの使用時にはワーニングが出るようになってます。

投稿2020/04/17 12:47

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mochiwarabi

2020/04/17 12:51

なるほどなるほど 初期化なしだと警告が出る物もあるんですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問