std::in_range
定义于头文件 <utility>
|
||
template< class R, class T > constexpr bool in_range( T t ) noexcept; |
(C++20 起) | |
若 t
的值在能以 R
表示的值的范围内,即 t
能转换到 R
而无数据损失则为 true 。
若 T
或 R
不是有符号或无符号整数类型(包括标准整数类型与扩展整数类型),则为编译时错误。
参数
t | - | 要测试的值 |
返回值
若 t
的值可以 R
表示则为 true ,否则为 false 。
可能的实现
template< class R, class T > constexpr bool in_range( T t ) noexcept { return std::cmp_greater_equal(t, std::numeric_limits<R>::min()) && std::cmp_less_equal(t, std::numeric_limits<R>::max()); } |
注解
此函数不能用于 std::byte 、 char 、 char8_t 、 char16_t 、 char32_t 、 wchar_t 及 bool 。
示例
运行此代码
#include <utility> #include <iostream> #include <iomanip> int main() { std::cout << std::boolalpha; std::cout << std::in_range<std::size_t>(-1) << '\n'; std::cout << std::in_range<std::size_t>(42) << '\n'; }
输出:
false true