在线文档教程
C++
应用 | Utilities

std::numeric_limits::is_modulo

STD::数字[医]限制::IS[医]模数

static const bool is_modulo;(until C++11)
static constexpr bool is_modulo;(since C++11)

价值std::numeric_limits<T>::is_modulo是true所有算术类型T该句柄溢出了模运算,也就是说,如果这种类型的加法、减法、乘法或除法的结果超出了范围。[min(), max()],则此操作返回的值与预期值的倍数有所不同。max()-min()+1...

标准专业化

Tvalue of std::numeric_limits::is_modulo
/* non-specialized */false
boolfalse
charimplementation-defined
signed charimplementation-defined
unsigned chartrue
wchar_timplementation-defined
char16_timplementation-defined
char32_timplementation-defined
shortimplementation-defined
unsigned shorttrue
intimplementation-defined
unsigned inttrue
longimplementation-defined
unsigned longtrue
long longimplementation-defined
unsigned long longtrue
floatfalse
doublefalse
long doublefalse

注记

虽然C++11标准仍然说:“在大多数机器上,有符号整数都是这样。”但是,确切的措辞从C++03改为C++11,其方式是true值不再兼容有符号整数溢出的未定义行为%28它从“可能”改为严格要求%29。正因为如此,现在设置了依赖于签名溢出的实现(%28)以获得优化机会%29。is_modulofalse有符号整数。例如见gcc PR 22200...

预计标准措辞将改为“is”。[医]模对于有符号整数类型是false,除非实现定义有符号整数溢出以包装“per”。lwg第2422期...

演示模块类型的行为。

二次

#include <iostream> #include <type_traits> #include <limits> template<class T> typename std::enable_if<std::numeric_limits<T>::is_modulo>::type check_overflow() { std::cout << "\nmax value is " << std::numeric_limits<T>::max() << '\n' << "min value is " << std::numeric_limits<T>::min() << '\n' << "max value + 1 is " << std::numeric_limits<T>::max()+1 << '\n'; } int main() { check_overflow<int>( check_overflow<unsigned long>( // check_overflow<float>( // compile-time error, not a modulo type }

二次

可能的产出:

二次

max value is 2147483647 min value is -2147483648 max value + 1 is -2147483648 max value is 18446744073709551615 min value is 0 max value + 1 is 0

二次

另见

is_integer staticidentifies integer types (public static member constant)
is_iec559 staticidentifies the IEC 559/IEEE 754 floating-point types (public static member constant)
is_exact staticidentifies exact types (public static member constant)

© cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

http://en.cppreference.com/w/cpp/type/NUMERIC[医]限制/IS[医]模数