bool
コンストラクターによって初期化されていないデータメンバーを持つクラスがあります。私が行った場合
cout << x.myBoolDataMember;
x
が初期化されていないこのクラスのオブジェクトはどこにありbool
ますか。0または1ではなく乱数を取得することがあります(使用してgcc
います。)この動作は?に準拠していStandard
ますか?
bool
コンストラクターによって初期化されていないデータメンバーを持つクラスがあります。私が行った場合
cout << x.myBoolDataMember;
x
が初期化されていないこのクラスのオブジェクトはどこにありbool
ますか。0または1ではなく乱数を取得することがあります(使用してgcc
います。)この動作は?に準拠していStandard
ますか?
この動作は標準に準拠していますか?
はい!コードでガベージ値(初期化されていない)を使用すると、未定義動作が呼び出されます
はい。初期化されていない変数は任意の値を持つことができます。
「<<」演算子がブール値をチェックしないとすぐに、この動作は正しくなります。
ここでの問題はbool自体に隠されています。プログラムはboolを格納するために複数のビットを使用します。これは実装に依存します。ブール値を格納するために1ビットしか使用できない場合があります。
時にはそれ以上、そしてそれはそのような場合です。