Spec-Zone.ru › C++

std::reverse_iterator<Iter>::operator*,->

reference operator*() const;
(1) (constexpr с C++17)
pointer operator->() const;
(2) (до C++20)
(constexpr с C++17)
constexpr pointer operator->() const
    requires (std::is_pointer_v<Iter> ||
              requires (const Iter i) { i.operator->(); });
(с C++20)

Возвращает ссылку или указатель на элемент, предшествующий current.

1) Эквивалентно Iter tmp = current; return *--tmp;.
2) Эквивалентно:

return &(operator*());

(до C++11)

return std::addressof(operator*());

(с C++11)
(до C++20)
  • return current - 1; если Iter является типом указателя.
  • return std::prev(current).operator->();} в противном случае.
(с C++20)

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

Ссылка или указатель на элемент, предшествующий current.

Пример

#include <complex>
#include <iostream>
#include <iterator>
#include <list>

int main()
{
    using RI0 = std::reverse_iterator<int*>;
    int a[]{0, 1, 2, 3};
    RI0 r0{std::rbegin(a)};
    std::cout << "*r0 = " << *r0 << '\n';
    *r0 = 42;
    std::cout << "a[3] = " << a[3] << '\n';

    using RI1 = std::reverse_iterator<std::list<std::complex<double>>::iterator>;
    std::list<std::complex<double>> li{{1, 2}, {3, 4}, {5, 6}};
    const RI1 r1{li.rbegin()};
    std::cout << "*r1 = (" << r1->real() << ',' << r1->imag() << ")\n";
    li.insert(li.end(), std::complex<double>{7, 8});
    std::cout << "*r1 = (" << r1->real() << ',' << r1->imag() << ")\n";
}

Вывод:

*r0 = 3
a[3] = 42
*r1 = (5,6)
*r1 = (7,8)

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

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

DR Применяется к Опубликованное поведение Корректное поведение
LWG 2188 C++11 operator-> использовал & для получения адреса вместо этого использует std::addressof

См. также

operator[]
обращается к элементу по индексу
(открытая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/iterator/reverse_iterator/operator*

Spec-Zone.ru

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