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.

Daily bit(e) C++

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 конструктора перемещения

Пример на Compiler Explorer

Теги

C++ / CppDaily bit(e) C++Программирование