は、最善の構文はboost::numeric_cast<>()
を使用するようです:ブーストを使用する::私は異なる整数型の間で変換したい場合はnumeric_cast <>
int y = 99999;
short x = boost::numeric_cast<short>(y); // will throw an exception if y is too large
私はそれを使用したことがありません。構文はかなり単純です。したがって、すべてがうまくいきます。
もう少し先を進めたいと思います。例外をスローするのではなく、ターゲットタイプの最小値または最大値(彩度)を戻したいと思います。私はそれを表現する方法を理解することができませんでしたが、documentationはそれが可能であることを示唆しています(おそらくRawConverter
方針を使用しています)。私が思い付くことができるすべては、次のように醜いです:
short x = numeric_cast<short>(max(min(y, SHORT_MAX), SHORT_MIN);
は、どのように私は、ブーストのnumeric_cast
を使用して、「飽和キャスト」を表現することができますか?
例外依存:(C++例外を使用しないプロジェクトもありますが、これは覚えておくと便利です) – Kos
@Kos:プロジェクトですべての言語機能が使用されていない場合は、他の人がその機能を気に入らないかもしれないので、一部の機能を使用しない言語用のコードを書く必要はありません。 – Puppy
例外は、すべての利点に加えて、制御フローを複雑にし、オーバーヘッドを招く可能性があります。多くの(すべてではない)C++プロジェクトは、例外なく存在するのが良い理由があり、例外サポートなしでコンパイルされています。 – Kos