iter_move (std::common_iterator)
|
friend
constexpr
decltype
(
auto
)
iter_move
(
const
std::
common_iterator
&
i
)
noexcept
(
noexcept
(
ranges::
iter_move
(
std::
declval
<
const
I
&
>
(
)
)
)
|
(начиная с C++20) | |
Приводит результат разыменования базового итератора к соответствующему типу rvalue-ссылки.
Тело функции эквивалентно: return std :: ranges:: iter_move ( std :: get < I > ( i. var ) ) ; .
Эта функция не видна при обычном unqualified или qualified lookup , и может быть найдена только с помощью argument-dependent lookup , когда std:: common_iterator < I, S > является ассоциированным классом аргументов.
Если
i.
var
не содержит объект
I
(т.е. итератор), поведение не определено.
Содержание |
Параметры
| i | - | адаптер исходного итератора |
Возвращаемое значение
Ссылка на rvalue или временный объект prvalue.
Сложность
Константа.
Пример
#include <iomanip> #include <iostream> #include <iterator> #include <string> #include <vector> void print(auto const& rem, auto const& v) { std::cout << rem << '[' << size(v) << "] { "; for (int o{}; auto const& s : v) std::cout << (o++ ? ", " : "") << std::quoted(s); std::cout << " }\n"; } int main() { std::vector<std::string> p{"Andromeda", "Cassiopeia", "Phoenix"}, q; print("p", p); print("q", q); using CTI = std::counted_iterator<std::vector<std::string>::iterator>; using CI = std::common_iterator<CTI, std::default_sentinel_t>; CI last{std::default_sentinel}; for (CI first{{p.begin(), 2}}; first != last; ++first) q.emplace_back(/* ADL */ iter_move(first)); print("p", p); print("q", q); }
Возможный вывод:
p[3] { "Andromeda", "Cassiopeia", "Phoenix" }
q[0] { }
p[3] { "", "", "Phoenix" }
q[2] { "Andromeda", "Cassiopeia" }
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение в опубликованной версии | Исправленное поведение |
|---|---|---|---|
| LWG 3953 | C++20 | тип возвращаемого значения был std:: iter_rvalue_reference_t < I > | изменён на decltype ( auto ) |
Смотрите также
|
(C++20)
|
преобразует результат разыменования объекта в связанный тип rvalue-ссылки
(объект точки кастомизации) |
|
(C++20)
|
преобразует результат разыменования базового итератора в связанный тип rvalue-ссылки
(функция) |
|
(C++11)
|
преобразует аргумент в xvalue
(шаблон функции) |
|
(C++11)
|
преобразует аргумент в xvalue, если конструктор перемещения не выбрасывает исключений
(шаблон функции) |
|
(C++11)
|
перенаправляет аргумент функции и использует параметр шаблона типа для сохранения его категории значения
(шаблон функции) |
|
(C++20)
|
перемещает диапазон элементов в новое местоположение
(функциональный объект алгоритма) |
|
(C++20)
|
перемещает диапазон элементов в новое местоположение в обратном порядке
(функциональный объект алгоритма) |