質問: 0 == True ``` NaNをゼロに変換するが、Trueのように変換するのは面倒です。 MatLabは `int16` のような関数を使ってNaNを0に変換するようなものではない。 したがって、NaNがどのようにブール値と整数値に変換するかを記述する関連標準の詳細は何ですか? *私はブール値の変換を定義していないかもしれませんが、それはおそらく完全な変換を定義して条件付きで使用するので、C ++は同じ規則に従います*
回答: CとC ++の両方で、 `NAN` を `bool` 以外の整数型に変換するときの動作は未定義です。 > C99 6.3.1.4/1:実浮動型の有限値を `_Bool` 以外の整数型に変換すると、小数部は破棄されます(つまり、値はゼロに切り捨てられます) 。整数部分の値を整数型で表すことができない場合、**動作は未定義です**。 > > > > C ++ 11 4.9/1:浮動小数点型のprvalueは整数型のprvalueに変換できます。変換は切り詰められます。つまり、端数部分は破棄されます。トランケートされた値を宛先タイプで表現できない場合は、**動作は未定義です**。 [*注:*宛先タイプが `bool` の場合は、4.12を参照してください。 *エンドノート*] > > どちらの言語でも `NAN` を `bool` (または `_Bool` )に変換すると `true` コード>): > C99 6.3.1.2/1:スカラー値が `_Bool` に変換されると、その値が0に等しいと比較された場合、結果は0になります。それ以外の場合、結果は1です。 > > > > C ++ 11 4.12/1:ゼロ値、ヌルポインタ値、またはヌルメンバポインタ値は `false` に変換されます。他の値は `true` に変換されます。 > > `NAN` is not a zero value, and doesn't compare equal to zero.