<type_traits>
函式
is_assignable
is_copy_assignable
is_copy_constructible
is_default_constructible
is_move_assignable
is_move_constructible
is_nothrow_move_assignable
is_nothrow_swappable
is_nothrow_swappable_with
is_swappable
is_swappable_with
is_trivially_copy_assignable
is_trivially_move_assignable
is_trivially_move_constructible
is_assignable
測試 From 類型的值是否可以指派給 To 類型。
template <class To, class From>
struct is_assignable;
參數
目標
接收指派的物件類型。
從
提供值的物件類型。
備註
未評估的運算式 declval<To>() = declval<From>()
必須格式正確。 From 和 To 都必須是未知系結的完整類型、void
或數位。
is_copy_assignable
測試類型是否可以在指派上複製。
template <class Ty>
struct is_copy_assignable;
參數
Ty
要查詢的類型。
備註
如果類型 Ty 是具有複製指派運算子的類別,則類型述詞的實例會保留 true,否則會保留 false。 相當於 is_assignable<Ty&, const Ty&.>
is_copy_constructible
測試類型是否有複製建構函式。
template <class Ty>
struct is_copy_constructible;
參數
Ty
要查詢的類型。
備註
如果類型 Ty 是具有複製建構函式的類別,則類型述詞的實例會保留 true,否則會保留 false。
範例
#include <type_traits>
#include <iostream>
struct Copyable
{
int val;
};
struct NotCopyable
{
NotCopyable(const NotCopyable&) = delete;
int val;
};
int main()
{
std::cout << "is_copy_constructible<Copyable> == " << std::boolalpha
<< std::is_copy_constructible<Copyable>::value << std::endl;
std::cout << "is_copy_constructible<NotCopyable> == " << std::boolalpha
<< std::is_copy_constructible<NotCopyable>::value << std::endl;
return (0);
}
is_copy_constructible<Copyable> == true
is_copy_constructible<NotCopyable > == false
is_default_constructible
測試類型是否有預設建構函式。
template <class Ty>
struct is_default_constructible;
參數
T
要查詢的類型。
備註
如果類型 T 是具有預設建構函式的類別類型,則類型述詞的實例會保留 true,否則會保留 false。 這相當於述詞 is_constructible<T>
。 類型 T 必須是完整類型、 void
或未知系結的陣列。
範例
#include <type_traits>
#include <iostream>
struct Simple
{
Simple() : val(0) {}
int val;
};
struct Simple2
{
Simple2(int v) : val(v) {}
int val;
};
int main()
{
std::cout << "is_default_constructible<Simple> == " << std::boolalpha
<< std::is_default_constructible<Simple>::value << std::endl;
std::cout << "is_default_constructible<Simple2> == " << std::boolalpha
<< std::is_default_constructible<Simple2>::value << std::endl;
return (0);
}
is_default_constructible<Simple> == true
is_default_constructible<Simple2> == false
is_move_assignable
測試是否可對類型進行移動指派。
template <class T>
struct is_move_assignable;
參數
T
要查詢的類型。
備註
如果對類型的 rvalue 參考可以指派給對類型的參考,該類型即為可透過移動方式指派的類型。 類型述詞相當於 is_assignable<T&, T&&>
。 可移動指派的類型包含可參考的純量類型和類別類型,而且有由編譯器產生或使用者定義的移動指派運算子。
is_move_constructible
測試類型是否具有移動建構函式。
template <class T>
struct is_move_constructible;
參數
T
要評估的類型
備註
如果型別 T 可以使用行動作業來建構,則評估為 true 的類型述詞。 這個述詞相當於 is_constructible<T, T&&>
。
is_nothrow_move_assignable
測試類型是否具有 nothrow
移動指派運算符。
template <class Ty>
struct is_nothrow_move_assignable;
參數
Ty
要查詢的類型。
備註
如果類型 Ty 具有 nothrow 移動指派運算符,則類型述詞的實例會保留 true,否則會保留 false。
is_nothrow_swappable
template <class T> struct is_nothrow_swappable;
is_nothrow_swappable_with
template <class T, class U> struct is_nothrow_swappable_with;
is_swappable
template <class T> struct is_swappable;
is_swappable_with
template <class T, class U> struct is_swappable_with;
is_trivially_copy_assignable
測試類型是否有 trivial 複製指派運算子。
template <class Ty>
struct is_trivially_copy_assignable;
參數
T
要查詢的類型。
備註
如果類型 T 是具有簡單複製指派運算子的類別,則類型述詞的實例會保留 true,否則為 false。
如果以隱含方式提供類別 T 的指派建構函式,則類別 T 沒有虛擬函式、類別 T 沒有虛擬基底、類別類型所有非靜態數據成員的類別都有微不足道的指派運算符,而類別數位中所有非靜態數據成員的類別則具有微不足道的指派運算符。
is_trivially_move_assignable
測試類型是否有 trivial 移動指派運算子。
template <class Ty>
struct is_trivially_move_assignable;
參數
Ty
要查詢的類型。
備註
如果類型 Ty 是具有簡單移動指派運算子的類別,則類型述詞的實例會保留 true,否則為 false。
如果類別 Ty 的移動指派運算子是微不足道的:
它會隱含地提供
類別 Ty 沒有虛擬函式
類別 Ty 沒有虛擬基底
類別類型的所有非靜態資料成員的類別具有 trivial 移動指派運算子
類別的類型陣列的所有非靜態資料成員的類別具有 trivial 移動指派運算子
is_trivially_move_constructible
測試類型是否有 trivial 移動建構函式。
template <class Ty>
struct is_trivially_move_constructible;
參數
Ty
要查詢的類型。
備註
如果類型 Ty 是具有簡單移動建構函式的類別,則類型述詞的實例會保留 true,否則為 false。
如果:
它是隱含宣告
其參數類型相等於隱含宣告的參數類型
類別 Ty 沒有虛擬函式
類別 Ty 沒有虛擬基底
類別沒有任何變動性的非靜態資料成員
Ty 類別的所有直接基底都有簡單移動建構函式
類別類型的所有非靜態資料成員的類別都具有 trivial 移動建構函式
類別的類型陣列的所有非靜態資料成員的類別,都具有 trivial 移動建構函式