std::exchange — простой способ менять значения и возвращать старые
std::exchange — простой способ менять значения и возвращать старые Вместо того чтобы писать руками: auto old = value; value = new_value; return old; В modern C++ есть готовый инструмент - std::exchange (C++14+). #include <utility> #include <string> #include <iostream> int main() { std::string s = "Hello"; auto old = std::exchange(s, "World"); std::cout << "old = " << old << ", s = " << s << '\n'; } Вывод: old = Hello, s = World Когда полезно: - Реализация move-конструкторов/операторов: MyType(MyType&& other) : data_(std::exchange(other.data_, nullptr)) {} - Сброс состояния объектов и возвращение старого значения. - Реализация одноразовых флагов (`once_flag` паттерн). Плюсы: - Одна строка вместо трёх. - Читаемость выше — сразу видно, что мы заменяем значение и берём старое. Помни: по умолчанию второе значение копируется/перемещается, так что это не нулевой по стоимости вызов.