質問に対する回答のコメントで質問が発生しました。intに型キャストされた場合、C / C ++ブール型は常に0または1であることが保証されていますか?
問題のコードは、値を初期化せずにの(ローカル)配列を割り当てbool
ます。
const int n = 100;
bool b[n];
明らかに、の値b
は不確定です。
一部のコメント提供者は、例えば読書b[0]
は未定義の行動であると意見を述べました。これはC++標準のどこかに記載されていますか?私はまだ反対のことを確信しています:
コンストラクターがないため、明らかにストレージが割り当てられ、基本的なブール型の初期化が完了しています。したがって、初期化されていないポインタを逆参照したり、初期化されていない重要なオブジェクトに対してメソッド/キャスト演算子を呼び出したりすることとは確かに同じではありません。これらの特定のケースは、標準でカバーされているようです。
動作は実際にCでは定義されていません。Cで宣言された初期化されていない変数はどうなりますか?価値はありますか?一部の回答者は2つを混同しているようです。
最新のC++0xドラフトでは、不確定な値の定義、特にそのような値にアクセスしてプロセッサトラップをトリガーできる定義は見つかりません。確かに、Bjarne Stroustrupは、不確定な値が何であるかを確信していません:http: //zamanbakshifirst.blogspot.com/2007/02/c-indeterminate-value.html