C++ 概念: Swappable
该页由英文版wiki使用Google Translate机器翻译而来。
该翻译可能存在错误或用词不当。鼠标停留在文本上可以看到原版本。你可以帮助我们修正错误或改进翻译。参见说明请点击这里. |
Any lvalue or rvalue of this type can be swapped with any lvalue or rvalue of the some other type, using unqualified function call swap() in the context where both std::swap and the user-defined swap()s are visible.
[编辑] 要求
Type U is swappable with type T if, for any object u of type U and any object t of type T,
Expression | Requirements | Semantics |
---|---|---|
#include <utility> using std::swap; |
After the call, the value of t is the value held by u before the call, and the value of u is the value held by t before the call.
|
Calls the function named swap() found by overload resolution among all functions with that name that are found by argument-dependent lookup and the two std::swap templates defined in the header <utility>. |
#include <utility> using std::swap; |
same | same |
Many standard library functions (for example, many algorithms) expect their arguments to satisfy Swappable
, which means that any time the standard library performs a swap, it uses the equivalent of using std::swap; swap(t, u);.
[编辑] 注释
It is unspecified if <utility> is actually included when the standard library functions perform the swap, so the user-provided swap() should not expect it to be included.
[编辑] 示例
#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; // std::swap(v1, v2); // compiler error! std::swap requires MoveAssignable std::iter_swap(&v1, &v2); // OK: library calls unqualified swap() }