std::array
の不思議な振る舞いに私はつまずいた。 std::vector
などの一部のコンテナでは、すべてのセルが初期化され、int
のベクトルはデフォルトで0で満ちるベクトルになります。これがstd::array
でも当てはまるかどうかを調べました。私は2つの事を発見しました:デフォルトの値を持つstd :: arrayの初期化
1)ほとんどのセルが初期化されているようですが(おそらくこれには別の理由があります)、そうでないものもあります。
2)初期化されていないセルは、常に同じです。これは、プログラムの別々の実行と別々のコンパイルとの間でも当てはまります。以下の出力を考えてみましょう。このコードの場合:
なぜこれらの2つのものがこのようになっているのだろうか。この見かけ上の初期化(おそらく何か他のもの)の原因と、初期化されていないセルは常に同じものです(そして、前の実行時と同じ値を持つことがあります)。
$ cocompile test.cpp
$ ./a.out
1583671832 1235456 1235456 1235456 1235456 1235456 0 0 0 0
$ ./a.out
1539111448 1235456 1235456 1235456 1235456 1235456 0 0 0 0
$ ./a.out
1509472792 1235456 1235456 1235456 1235456 1235456 0 0 0 0
$ cocompile test.cpp
$ ./a.out
1551280664 32767 1551280664 32767 55136256 1 0 1 71644448 1 71644352 1 0 0 0 0 0 0 0 0
$ ./a.out
1413601816 32767 1413601816 32767 192815104 1 0 1 407872800 1 407872704 1 0 0 0 0 0 0 0 0
$ ./a.out
1542519320 32767 1542519320 32767 63897600 1 0 1 129918240 1 129918144 1 0 0 0 0 0 0 0 0
$ cocompile test.cpp
$ ./a.out
1510054424 32767 1 0 1510054368 32767 145269321 1 1510054400 32767 1510054400 32767 1510054424 32767 96362496 1 0 1 145265952 1 145265856 1 0 0 0 0 0 0 0 0
$ ./a.out
1394678296 32767 1 0 1394678240 32767 378704457 1 1394678272 32767 1394678272 32767 1394678296 32767 211738624 1 0 1 378701088 1 378700992 1 0 0 0 0 0 0 0 0
$ ./a.out
1436727832 32767 1 0 1436727776 32767 353342025 1 1436727808 32767 1436727808 32767 1436727832 32767 169689088 1 0 1 353338656 1 353338560 1 0 0 0 0 0 0 0 0
の可能性のある重複(https://stackoverflow.com/questions/18295302/default-initialization-of- stdarray) – speedious
いいえ、それは私の質問ではありません。 –