"swappable types"的标准要求是swap(t, u),其中来自<utility>标头的std::swap是可行的候选项。 using namespace std;和if都可以满足这一点,标准的方法是后者(https://wg21.link/swappable.requirements#6):
#include <utility>
// Preconditions: std::forward<T>(t) is swappable with std::forward<U>(u).
template<class T, class U>
void value_swap(T&& t, U&& u) {
using std::swap;
swap(std::forward<T>(t), std::forward<U>(u)); // OK, uses “swappable with'' conditions
// for rvalues and lvalues
}
// Preconditions: lvalues of T are swappable.
template<class T>
void lv_swap(T& t1, T& t2) {
using std::swap;
swap(t1, t2); // OK, uses swappable conditions for lvalues of type T
}
1条答案
按热度按时间3ks5zfa01#
"swappable types"的标准要求是
swap(t, u)
,其中来自<utility>
标头的std::swap
是可行的候选项。using namespace std;
和if都可以满足这一点,标准的方法是后者(https://wg21.link/swappable.requirements#6):要交换两个相同类型的左值,也可以使用
std::iter_swap(std::addressof(a), std::adddressof(b))
。这不需要using声明。另请参阅:
std::is_swappable
。这与C++20的
swappable
概念是分开的,后者使用std::ranges::swap
,尽管这可能是您想要使用的。