Daily bit(e) C++. std::views::as_rvalue
Добавлено 31 августа 2026 в 15:40
Daily bit(e) C++ 96, представление, эквивалент std::move_iterator, в C++23: std::views::as_rvalue.

std::views::as_rvalue в C++23 – это представление, эквивалентное адаптеру итератора std::move_iterator в C++11.
Элементы представления представлены в виде rvalue, что полезно, когда исходные данные могут быть использованы, что позволяет избежать ненужного копирования.
#include <ranges>
#include <algorithm>
#include <vector>
struct Tattler {};
std::vector<Tattler> data{{},{},{}};
for (const auto& v : data |
std::views::transform([](const auto& e) {
return e;
})) { }
// выполнено 3 конструктора копирования
for (auto v : data |
std::views::as_rvalue |
std::views::transform([](auto&& e) {
return std::forward<decltype(e)>(e);
})) { }
// выполнено 3 конструктора перемещения
