C++ 概念: ValueSwappable
来自cppreference.com
该页由英文版wiki使用Google Translate机器翻译而来。
该翻译可能存在错误或用词不当。鼠标停留在文本上可以看到原版本。你可以帮助我们修正错误或改进翻译。参见说明请点击这里. |
可以解除引用此类型的两个对象,和所得到的值,可以在上下文中使用不合格的函数调用swap()交换两个std::swap和用户定义swap()s是可见.
原文:
Two objects of this type can be dereferenced and the resulting values can be swapped using unqualified function call swap() in the context where both std::swap and the user-defined swap()s are visible.
[编辑] 要求
T型,
ValueSwappable
如果2)
许多标准库函数期望他们的论据,以满足
ValueSwappable
,这意味着,任何时间进行交换的标准库,它使用的是等效的using std::swap; swap(*iter1, *iter2):.原文:
Many standard library functions expect their arguments to satisfy
ValueSwappable
, which means that any time the standard library performs a swap, it uses the equivalent of using std::swap; swap(*iter1, *iter2):.[编辑] 示例
#include <iostream> #include <vector> class IntVector { std::vector<int> v; IntVector& operator=(IntVector); // not assignable public: void swap(IntVector& other) { v.swap(other.v); } }; void swap(IntVector& v1, IntVector& v2) { v1.swap(v2); } int main() { IntVector v1, v2; // IntVector is Swappable, but not MoveAssignable IntVector* p1 = &v1; IntVector* p2 = &v2; // IntVector* is ValueSwappable std::iter_swap(p1, p2); // OK: iter_swap requires ValueSwappable // std::swap(v1, v2); // compiler error! std::swap requires MoveAssignable }