What and Why 这次单独说一下 std::exchange,它是 C++14 <utility> 提供的一个函数模板,实现很简单。 template<class T, class U = T> constexpr // since C++20 T exchange(T& obj, U&& new_value) noexcept( // since C++23 std::is_nothrow_move_constructible<T>::value && std::is_nothrow_assignable<T&, U>::value ) { T old_value = std::move(obj); obj = std::forward<U>(new_value); return old_value; } 看实现可知其逻辑很简单,就是设置新值、返回旧值。但却难以顾名思义,它实际上并不会交换数据,那得这样写: y = std::exchange(x, y); 上篇说过,std::exchange 和… Continue Reading std::exchange use cases