По определённым причинам имеется необходимость реализовать собственный итератор (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
?
На 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 &
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть такой пример использования condition_variable:
Учу С++ самостоятельно, вот решил написать программу, которая определяет, есть ли повторяющиеся цифры в числеЧтобы усложнить себе жизнь, добавил...
Есть пример который компилируется