# std::experimental::ranges::exchange

< cpp‎ | experimental‎ | ranges

定义于头文件 `<experimental/ranges/utility>` |  |
template< ranges::MoveConstructible T, class U = T > requires ranges::Assignable<T&, U> constexpr T exchange(T& obj, U&& new_val) noexcept(/* see below */); |  | (范围 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)

### 示例

| 本节未完成 原因：暂无示例

### 参阅

exchange (C++14) | 将实参替换为一个新值，并返回其先前值 (函数模板)