共用方式為


<type_traits>

定義編譯時間常數的範本,以提供其類型自變數屬性的相關信息,或產生轉換的類型。

語法

#include <type_traits>

備註

>type_traits中的<類別和範本可用來支援編譯時期的類型推斷、分類和轉換。 它們也可用來偵測類型相關的錯誤,並協助您優化一般程式代碼。 一元類型特性描述類型的屬性、二進位類型特性描述類型之間的關聯性,以及轉換特性會修改類型的屬性。

協助程式類別 integral_constant 及其範本特製化 true_type ,並 false_type 形成類型述詞的基類。 「類型述詞」是採用一或兩個類型引數的範本。 當類型述 詞保留 true 時,它會直接或間接衍生自 true_type。 當類型述 詞保留 false 時,它會直接或間接衍生自 false_type

類型修飾詞轉換特性是採用一或多個範本引數的範本,且具有一個成員 type,這是已修改類型的同義字。

別名範本

為了簡化類型特性表達式,會提供的typename some_trait<T>::type別名範本,其中 some_trait 是類別範本名稱。 例如,add_const 具有其類型 add_const_t 的別名範本,定義為:

template <class T>
using add_const_t = typename add_const<T>::type;

這些是成員所提供的別名 type

add_const_t
add_cv_t
add_lvalue_reference_t
add_pointer_t
add_rvalue_reference_t
add_volatile_t
aligned_storage_t
aligned_union_t\

common_type_t
conditional_t
decay_t
enable_if_t
invoke_result_t
make_signed_t
make_unsigned_t
remove_all_extents_t\

remove_const_t
remove_cv_t
remove_extent_t
remove_pointer_t
remove_reference_t
remove_volatile_t
result_of_t
underlying_type_t\

類別

Helper 類別和 typedef

名稱 描述
integral_constant 從類型及值建立整數常數。
true_type 存有具有 True 值的整數常數。
false_type 存有具有 False 值的整數常數。

主要的類型類別

名稱 描述
is_void 測試類型是否為 void
is_null_pointer 測試類型是否為 std::nullptr_t
is_integral 測試類型是否為整數。
is_floating_point 測試類型是否為浮點。
is_array 測試類型是否為陣列。
is_pointer 測試類型是否為指標。
is_lvalue_reference 測試類型是否為 lvalue 參考。
is_rvalue_reference 測試類型是否為 rvalue 參考。
is_member_object_pointer 測試類型是否為成員物件的指標。
is_member_function_pointer 測試類型是否為成員函式的指標。
is_enum 測試類型是否為列舉。
is_union 測試類型是否為等位。
is_class 測試類型是否為類別。
is_function 測試類型是否為函式類型。

複合類型類別

名稱 描述
is_reference 測試類型是否為參考。
is_arithmetic 測試類型是否為算術。
is_fundamental 測試類型是否為 void 或算術。
is_object 測試類型是否為物件類型。
is_scalar 測試類型是否為純量。
is_compound 測試類型是否不是純量。
is_member_pointer 測試類型是否為成員的指標。

類型屬性

名稱 描述
is_const 測試類型是否為 const
is_volatile 測試類型是否為 volatile
is_trivial 測試類型是否為 trivial。
is_trivially_copyable 測試類型是否可完整複製。
is_standard_layout 測試類型是否為標準配置類型。
is_pod 測試類型是否為 POD。
is_literal_type 測試類型是否可以是 constexpr 變數或用於 constexpr 函式。
is_empty 測試類型是否為空的類別。
is_polymorphic 測試類型是否為多型類別。
is_abstract 測試類型是否有抽象類別。
is_final 測試類型是否為標示 final 的類別類型。
is_aggregate
is_signed 測試類型是否為有正負號整數。
is_unsigned 測試類型是否為無正負號整數。
is_constructible 測試類型是否可使用指定的引數類型建構。
is_default_constructible 測試類型是否有預設建構函式。
is_copy_constructible 測試類型是否有複製建構函式。
is_move_constructible 測試類型是否具有移動建構函式。
is_assignable 測試第一個類型是否可以指派第二個類型的值。
is_copy_assignable 測試類型是否可指派類型的常數參考值。
is_move_assignable 測試類型是否可指派類型的右值參考。
is_swappable
is_swappable_with
is_destructible 測試類型是否為易損壞的。
is_trivially_constructible 測試類型在使用指定的類型建構時是否不使用任何非 trivial 作業。
is_trivially_default_constructible 測試類型在預設建構時是否不使用任何非 trivial 作業。
is_trivially_copy_constructible 測試類型在複製建構時是否不使用任何非 trivial 作業。
is_trivially_move_constructible 測試類型在移動建構時是否不使用任何非 trivial 作業。
is_trivially_assignable 測試類型是否可指派,且指派不使用任何非 trivial 作業。
is_trivially_copy_assignable 測試類型是否可指派複製,且指派不使用任何非 trivial 作業。
is_trivially_move_assignable 測試類型是否可指派移動,且指派不使用任何非 trivial 作業。
is_trivially_destructible 測試類型是否可破壞,且解構函式不使用任何非 trivial 作業。
is_nothrow_constructible 測試類型是否可建構,且已知在使用指定的類型建構時不會擲回。
is_nothrow_default_constructible 測試類型是否可預設建構,且已知在預設建構時不會擲回。
is_nothrow_copy_constructible 測試類型是否可複製建構,且已知複製建構函式不會擲回。
is_nothrow_move_constructible 測試類型是否可移動建構,且已知移動建構函式不會擲回。
is_nothrow_assignable 測試類型是否可使用指定類型指派,且已知指派不會擲回。
is_nothrow_copy_assignable 測試類型是否可指派複製,且已知指派不會擲回。
is_nothrow_move_assignable 測試類型是否可指派移動,且已知指派不會擲回。
is_nothrow_swappable
is_nothrow_swappable_with
is_nothrow_destructible 測試類型是否可破壞,且已知解構函式不會擲回。
has_virtual_destructor 測試類型是否有虛擬解構函式。
has_unique_object_representations
is_invocable 測試是否可以使用指定的自變數類型來叫用可呼叫的類型。
已在 C++17 中新增。
is_invocable_r 測試是否可以使用指定的自變數類型叫用可呼叫的類型,而且結果可轉換成指定的型別。
已在 C++17 中新增。
is_nothrow_invocable 測試是否可以使用指定的自變數類型叫用可呼叫的類型,而且已知不會擲回例外狀況。
已在 C++17 中新增。
is_nothrow_invocable_r 測試是否可以使用指定的自變數類型叫用可呼叫的類型,而且已知不會擲回例外狀況,而且結果可轉換成指定的型別。
已在 C++17 中新增。

類型屬性的查詢

名稱 描述
alignment_of 取得類型的對齊方式。
rank 取得陣列維度的數目。
extent 取得指定陣列維度中的項目數目。

類型關聯

名稱 描述
is_same 測試兩個類型是否一樣。
is_base_of 測試某個類型是否為另一個類型的基底。
is_convertible 測試某個類型是否可轉換為另一個類型。

常數 volatile 修改

名稱 描述
add_const 從類型產生 const 類型。
add_volatile 從類型產生 volatile 類型。
add_cv 從類型產生 const volatile 類型。
remove_const 從類型產生非常數類型。
remove_volatile 從類型產生非 volatile 類型。
remove_cv 從類型產生非常數非 volatile 類型。

參考修改

名稱 描述
add_lvalue_reference 從類型產生類型的參考。
add_rvalue_reference 從類型產生類型的右值參考
remove_reference 從類型產生非參考類型。

簽章修改

名稱 描述
make_signed 如果已簽章或者最小已簽章類型的大小大於或等於類型,則產生類型。
make_unsigned 如果未簽章或者最小未簽章類型的大小大於或等於類型,則產生類型。

陣列修改

名稱 描述
remove_all_extents 從陣列類型產生非陣列類型。
remove_extent 從陣列類型產生項目類型。

指標修改

名稱 描述
add_pointer 從類型產生類型的指標。
remove_pointer 從類型的指標產生類型。

其他轉換

名稱 描述
aligned_storage 為對齊類型配置未初始化的記憶體。
aligned_union 使用非簡單式建構函式或解構函式為對齊的聯集配置未初始化的記憶體。
common_type 產生參數封裝之所有類型的一般類型。
conditional 如果條件為 true,則產生第一個指定的類型,反之則產生第二個指定的類型。
decay 產生由值傳遞的類型。 建立非參考、非常數或非暫時性的類型,或建立類型的指標。
enable_if 如果條件為 true,則產生指定的類型,反之則不產生類型。
invoke_result 決定採用指定引數類型之可呼叫類型的傳回類型。
已在 C++17 中新增。
result_of 決定採用指定引數類型之可呼叫類型的傳回類型。
已在 C++14 中新增,C++17 中已被取代。
underlying_type 產生列舉類型的基礎整數類型。

邏輯運算子特性

名稱 描述
連接
分離
否定

另請參閱

<functional>