std::is_swappable_with, std::is_swappable, std::is_nothrow_swappable_with, std::is_nothrow_swappable
來自 cppreference.com
定義於標頭檔案 <type_traits> |
||
template< class T, class U > struct is_swappable_with; |
(1) | (C++17 起) |
template< class T > struct is_swappable; |
(2) | (C++17 起) |
template< class T, class U > struct is_nothrow_swappable_with; |
(3) | (C++17 起) |
template< class T > struct is_nothrow_swappable; |
(4) | (C++17 起) |
1) 如果表示式 swap(std::declval<T>(), std::declval<U>()) 和 swap(std::declval<U>(), std::declval<T>()) 在 using std::swap; 之後(參見 Swappable)在未求值上下文中均格式良好,則提供成員常量
value
等於 true。否則,value
為 false。 訪問檢查 執行時如同來自與兩種型別均無關的上下文。
3) 與 (1) 相同,但 (1) 中兩個表示式的求值已知不丟擲異常。
型別特徵 | 成員常量 value 的值 | |
---|---|---|
T 是可引用型別 |
T 不是可引用型別 | |
(2) | std::is_swappable_with<T&, T&>::value | false |
(4) | std::is_nothrow_swappable_with<T&, T&>::value |
如果 T
或 U
不是完整型別、(可能帶 cv 限定的)void,或未知邊界的陣列,則行為未定義。
如果上述模板的例項化直接或間接依賴於不完整型別,並且該例項化在該型別假設完成時可能產生不同的結果,則行為未定義。
如果程式為此頁上描述的任何模板新增特化,則行為未定義。
目錄 |
[編輯] 輔助變數模板
template< class T, class U > inline constexpr bool is_swappable_with_v = is_swappable_with<T, U>::value; |
(C++17 起) | |
template< class T > inline constexpr bool is_swappable_v = is_swappable<T>::value; |
(C++17 起) | |
template< class T, class U > inline constexpr bool is_nothrow_swappable_with_v = |
(C++17 起) | |
template< class T > inline constexpr bool is_nothrow_swappable_v = |
(C++17 起) | |
繼承自 std::integral_constant
成員常量
value [靜態] |
如果 T 可以與 U 交換,則為 true,否則為 false(public static 成員常量) |
成員函式
operator bool |
將物件轉換為 bool,返回 value (公開成員函式) |
operator() (C++14) |
返回 value (公開成員函式) |
成員型別
型別 | 定義 |
value_type
|
bool |
型別
|
std::integral_constant<bool, value> |
[編輯] 註解
此特性不檢查交換表示式的直接上下文之外的任何內容:如果 T
或 U
的使用會觸發模板特化、隱式定義特殊成員函式的生成等,並且這些存在錯誤,即使 std::is_swappable_with<T, U>::value 編譯並評估為 true,實際的交換也可能無法編譯。
[編輯] 示例
本節不完整 原因:無示例 |
[編輯] 另請參閱
交換兩個物件的值 (函式模板) | |
(C++11)(C++11)(C++11) |
檢查型別是否有移動賦值運算子 (類模板) |
(C++20) |
指定型別可以被交換,或者兩種型別可以互相交換 (概念) |