std::saturate_cast
来自 cppreference.com
定义在头文件 <numeric> 中 |
||
template< class T, class U > constexpr T saturate_cast( U x ) noexcept; |
(自 C++26) | |
将值 x 转换为类型 T
的值,将 x 限制在类型 T
的最小值和最大值之间。
如果 T
或 U
不是有符号或无符号的 整数类型(包括 标准整数类型 和 扩展整数类型),则程序格式错误。
内容 |
[编辑] 参数
x | - | 一个整数值 |
[编辑] 返回值
- x,如果 x 可表示为类型
T
的值。否则, - 类型
T
的最大或最小可表示值,两者之中哪个更接近 x 的值。
[编辑] 注释
功能测试 宏 | 值 | Std | 功能 |
---|---|---|---|
__cpp_lib_saturation_arithmetic |
202311L | (C++26) | 饱和算术 |
[编辑] 可能的实现
参见 libstdc++ (GCC)。
[编辑] 示例
可在 编译器资源管理器 上预览。
运行此代码
#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) |
检查一个整数值是否在给定整数类型的范围内 (函数模板) |