ValueSwappable
C++概念:ValueSwappable
这种类型的两个对象可以取消引用,并且可以使用不限定函数调用交换结果值。swap()
在这两种情况下std::swap
和用户定义的swap()
是可见的。
所需
T型ValueSwappable
如果。
1%29型T
满足Iterator
所需
2%29用于任何可撤销的对象x
类型T
%28--即,除结束迭代器%29以外的任何值,*x
满足Swappable
所需经费。
许多标准库函数期望它们的参数满足ValueSwappable
,这意味着每当标准库执行交换时,它都使用等效的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
}
二次
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。