Итераторы, rvalue и lvalue

248
13 октября 2021, 17:50

По определённым причинам имеется необходимость реализовать собственный итератор (Forward iterator) здесь сказано следующее:

Input Can be dereferenced as an rvalue

Output Can be dereferenced as an lvalue (only for mutable iterator types)

Там же, сказано, что Forward Iterator должен включать в себя функциональность Input iperator и Output iterator. Тогда, каким образом в Forward iterator могут присутствовать две реализации operator* возвращающие соответственно value_type и reference_type (rvalue и lvalue)?

Теперь вопрос: правильно ли я понимаю, что предыдущий абзац моего вопроса - бред, и lvalue с rvalue - понятия которые определяются (UPD: различаются) в зависимости от контекста, и, как следствие, реализация Forward iterator будет включать в себя возврат ссылки, которая можт употребляться как lvalue так и rvalue?

Answer 1

На cplusplus.com хватает ошибок.

Открываем https://en.cppreference.com/w/cpp/iterator и https://en.cppreference.com/w/cpp/named_req/InputIterator и видим, что:

  • Forward iterator не обязан быть output iterator'ом (но должен быть input iterator'ом).

  • *a для input iterator'а должен возвращать std::iterator_traits<..>::reference, но этот reference можно сделать вообще любым типом (нужно только чтобы его можно было преобразовать в std::iterator_traits<..>::value_type.

  • А вот у forward iterator'а reference должен совпадать с value_type &.

READ ALSO
Коллекции &lt;?, array&lt;type&gt;&gt; на C++/CLI

Коллекции <?, array<type>> на C++/CLI

Доброго времени суток

82
condition_variable почему не залочился в unique_lock?

condition_variable почему не залочился в unique_lock?

Есть такой пример использования condition_variable:

101
Вычисление одинаковых цифр числа. Код есть, он работает. Но вылетает при использовании больших чисел

Вычисление одинаковых цифр числа. Код есть, он работает. Но вылетает при использовании больших чисел

Учу С++ самостоятельно, вот решил написать программу, которая определяет, есть ли повторяющиеся цифры в числеЧтобы усложнить себе жизнь, добавил...

352