std::experimental::ranges::exchange
来自cppreference.com
                    
                                        
                    < cpp | experimental | ranges
                    
                                                            
                    |   template< ranges::MoveConstructible T, class U = T >     requires ranges::Assignable<T&, U>  | 
(范围 TS) | |
以 new_value 替换 obj 的值并返回 obj 的旧值,如同用以下方式
T old_value = std::move(obj); obj = std::forward<U>(new_value); return old_value;
参数
| obj | - | 要替换其值的对象 | 
| new_value | - |  要赋给 obj 的值
 | 
返回值
obj 的旧值。
异常
noexcept 规定:  
noexcept(std::is_nothrow_move_constructible<T>::value &&
std::is_nothrow_assignable<T&, U>::value)
std::is_nothrow_assignable<T&, U>::value)
示例
| 本节未完成 原因:暂无示例  | 
参阅
|    (C++14)  | 
  将实参替换为一个新值,并返回其先前值  (函数模板)  |