5

std::optional を実装sizeof(std::optional<double>) == 8して、NAN に文字を格納できるようにすることは可能ですか? http://en.cppreference.com/w/cpp/numeric/math/nanを参照してください。それを行う実装はありますか?標準で利用可能な機能の観点からそれを行うことはできますか?

4

4 に答える 4

1

std::optionalクラス(テンプレート)がどのように動作するかを指定する事後条件と矛盾するため、そのように実装することはできません。例: type の値で初期化されている場合は値がstd::optional 含まれていますが、選択した特別な NaN 値である値で初期化されている場合、T提案には値が含まれstd::optional<double>ません。

また、C++ 標準では、浮動小数点型が (quiet) NaN をサポートすることを保証/要求していません。一部のシステムはそうではありません。

独自の非標準optionalクラスを異なるセマンティクスで実装することは確かに可能です。もちろん、NaN 値が存在するという実装定義の事実に依存することになります。また、浮動小数点表現の知識に頼る必要があります。私の知る限り、NaN ペイロードを検査するための標準的なユーティリティはなく、特定のペイロードを持つ値を生成するためだけのものだからです。

于 2017-08-04T15:48:23.483 に答える