Spec-Zone.ru › C++

std::common_iterator<I,S>::operator=

template< class I2, class S2 >
requires std::convertible_to<const I2&, I> &&
         std::convertible_to<const S2&, S> &&
         std::assignable_from<I&, const I2&> &&
         std::assignable_from<S&, const S2&>
constexpr common_iterator& operator=( const common_iterator<I2, S2>& x );
(с C++20)

Присваивает базовую std::variant-член-объект var из объекта x.

Пусть i является x.var.index(). Тогда это присваивание эквивалентно:

  • std::get<i>(var) = std::get<i>(x.var), если var.index() == i,
  • var.emplace<i>(std::get<i>(x.var)) в противном случае.

Поведение не определено, если x находится в недопустимом состоянии, то есть x.var.valueless_by_exception() равно true.

Параметры

x - адаптер итератора для присваивания

Возвращаемое значение

*this

Пример

#include <algorithm>
#include <initializer_list>
#include <iostream>
#include <iterator>
 
int main()
{
    const auto il = {1, 2, 3, 4, 5, 6};
    using CI = std::common_iterator<
                   std::counted_iterator<std::initializer_list<int>::iterator>,
                   std::default_sentinel_t>;
    CI first{std::counted_iterator{std::next(begin(il), 1), ssize(il) - 1}};
    const CI first2{std::counted_iterator{std::next(begin(il), 2), ssize(il) - 2}};
    const CI last{std::default_sentinel};
    std::copy(first, last, std::ostream_iterator<int>{std::cout, " "});
    std::cout << '\n';
    first = first2;
    std::copy(first, last, std::ostream_iterator<int>{std::cout, " "});
    std::cout << '\n';
}

Вывод:

2 3 4 5 6 
3 4 5 6

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применимо к Поведение, как опубликовано Корректное поведение
LWG 3574 C++20 variant было полностью constexpr (P2231R1), но common_iterator не было также сделано constexpr

См. также

(конструктор)
(C++20)
создаёт новый адаптер итератора
(публичный член-функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/iterator/common_iterator/operator%3D

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API