名前空間
変種
操作

std::saturate_cast

From cppreference.com
< cpp‎ | numeric
 
 
 
ヘッダー <numeric> で定義
template< class T, class U >
constexpr T saturate_cast( U x ) noexcept;
(C++26以降)

x を型 T の値に変換し、x を型 T の最小値と最大値の間にクランプします。

T または U が符号付きまたは符号なしの整数型標準整数型および拡張整数型を含む)でない場合、プログラムは不定形となります。

目次

[編集] パラメータ

x - 整数値

[編集] 戻り値

  • x が型 T の値として表現可能な場合は x。それ以外の場合は、
  • x に最も近い、型 T の最大または最小の表現可能な値。

[編集] 注記

機能テストマクロ 規格 機能
__cpp_lib_saturation_arithmetic 202311L (C++26) 飽和演算

[編集] 実装例

libstdc++ (GCC) を参照してください。

[編集]

Compiler Explorer でプレビューできます。

#include <cstdint>
#include <limits>
#include <numeric>
 
int main()
{
    constexpr std::int16_t x1{696};
 
    constexpr std::int8_t x2 = std::saturate_cast<std::int8_t>(x1);
    static_assert(x2 == std::numeric_limits<std::int8_t>::max());
 
    constexpr std::uint8_t x3 = std::saturate_cast<std::uint8_t>(x1);
    static_assert(x3 == std::numeric_limits<std::uint8_t>::max());
 
    constexpr std::int16_t y1{-696};
 
    constexpr std::int8_t y2 = std::saturate_cast<std::int8_t>(y1);
    static_assert(y2 == std::numeric_limits<std::int8_t>::min());
 
    constexpr std::uint8_t y3 = std::saturate_cast<std::uint8_t>(y1);
    static_assert(y3 == 0);
}

[編集] 関連項目

(C++20)
ある型のオブジェクト表現を別の型のオブジェクト表現として再解釈する
(関数テンプレート) [編集]
(C++17)
値を一対の境界値の間に制限する
(関数テンプレート) [編集]
(C++20)
整数値が指定された整数型の範囲内にあるかを確認する
(関数テンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)