我不太明白为什么在下面的代码中直接调用
std::swap()
会导致编译错误,而使用std::iter_swap
则可以正常编译。根据iter_swap()
versus swap()
-- what's the difference?,iter_swap
最终会调用std::swap
,但它们的行为仍然不同。请注意保留原有的HTML标签和格式。#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()
}