std::is_integral
來自 cppreference.com
定義於標頭檔案 <type_traits> |
||
template< class T > struct is_integral; |
(C++11 起) | |
std::is_integral
是一個 一元型別特性。
檢查 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(public static 成員常量) |
成員函式
operator bool |
將物件轉換為 bool,返回 value (公開成員函式) |
operator() (C++14) |
返回 value (公開成員函式) |
成員型別
型別 | 定義 |
value_type
|
bool |
型別
|
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) |
檢查一個型別是否是列舉型別 (類模板) |