C++ named requirements: ValueSwappable (since C++11)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
两个此类型的对象可以被解引用,并且在 std::swap 与用户自定义的 swap ( ) 均可见的上下文中,可以通过非限定函数调用 swap ( ) 来交换其结果值。
要求
类型 T 满足 可值交换 要求,当
-
类型
T满足 LegacyIterator 要求。 -
对于类型
T的任何可解引用对象x(即除末尾迭代器外的任何值),*x满足 Swappable 要求。
许多标准库函数期望其参数满足 可交换值 要求,这意味着当标准库执行交换操作时,实际采用的是等效于 using std:: swap ; swap ( * iter1, * iter2 ) ; 的写法。
示例
#include <iostream> #include <vector> class IntVector { std::vector<int> v; // IntVector& operator=(IntVector); // 不可赋值(C++98方式) public: IntVector& operator=(IntVector) = delete; // 不可赋值 void swap(IntVector& other) { v.swap(other.v); } }; void swap(IntVector& v1, IntVector& v2) { v1.swap(v2); } int main() { IntVector v1, v2; // IntVector 可交换但不可移动赋值 IntVector* p1 = &v1; IntVector* p2 = &v2; // IntVector* 满足值可交换要求 std::iter_swap(p1, p2); // 正常:iter_swap 要求值可交换 // std::swap(v1, v2); // 编译错误!std::swap 要求可移动赋值 }
另请参阅
|
(C++20)
|
指定两个
indirectly_readable
类型所引用的值可被交换
(概念) |