std::is_integral
来自 cppreference.com
在头文件 <type_traits> 中定义 |
||
template< class T > struct is_integral; |
(自 C++11) | |
std::is_integral
是一个 UnaryTypeTrait.
检查 T
是否为 整型。提供成员常量 value,如果 T
是类型 bool,char, char8_t(自 C++20), char16_t, char32_t, wchar_t, short, int, long, long long,或任何实现定义的扩展整型,包括任何有符号、无符号和 cv 限定的变体,则该值为 true。否则,value 等于 false.
如果程序为 std::is_integral
或 std::is_integral_v
添加了专门化,则行为未定义。
内容 |
[编辑] 模板参数
T | - | 要检查的类型 |
[编辑] 辅助变量模板
template< class T > constexpr bool is_integral_v = is_integral<T>::value; |
(自 C++17) | |
从 std::integral_constant 继承
成员常量
value [静态] |
如果 T 是整型,则为 true,否则为 false(公共静态成员常量) |
成员函数
operator bool |
将对象转换为 bool,返回 value (公共成员函数) |
operator() (C++14) |
返回 value (公共成员函数) |
成员类型
类型 | 定义 |
value_type
|
bool |
type
|
std::integral_constant<bool, value> |
[编辑] 可能的实现
// Note: this implementation uses C++20 facilities template<class T> struct is_integral : std::bool_constant< requires (T t, T* p, void (*f)(T)) // T* parameter excludes reference types { reinterpret_cast<T>(t); // Exclude class types f(0); // Exclude enumeration types p + t; // Exclude everything not yet excluded but integral types }> {}; |
[编辑] 示例
运行此代码
#include <type_traits> static_assert ( std::is_integral_v<float> == false && std::is_integral_v<int*> == false && std::is_integral_v<int> == true && std::is_integral_v<const int> == true && std::is_integral_v<bool> == true && std::is_integral_v<char> == true ); class A {}; static_assert(std::is_integral_v<A> == false); struct B { int x:4; }; static_assert(std::is_integral_v<B> == false); using BF = decltype(B::x); // bit-field's type static_assert(std::is_integral_v<BF> == true); enum E : int {}; static_assert(std::is_integral_v<E> == false); template <class T> constexpr T same(T i) { static_assert(std::is_integral<T>::value, "Integral required."); return i; } static_assert(same('"') == 042); int main() {}
[编辑] 另请参阅
(C++20) |
指定类型为整型 (概念) |
[静态] |
识别整型 ( std::numeric_limits<T> 的公共静态成员常量) |
(C++11) |
检查类型是否为浮点型 (类模板) |
(C++11) |
检查类型是否为算术类型 (类模板) |
(C++11) |
检查类型是否为枚举类型 (类模板) |