Инвалифицирует ли изменяемый входной итератор старые значения итератора?

Iterators that further satisfy the requirements of output iterators are called mutable iterators. Nonmutable iterators are referred to as constant iterators. [24.2.1:4]

Это говорит о том, что у вас может быть изменяемый входной итератор, который отвечает требованиям как входных, так и выходных итераторов.

После увеличения входного итератора копии его старого значения не должны быть разыменованными [24.2.3]. Тем не менее, стандарт не говорит то же самое для выходных итераторов; фактически, операционная семантика для приращения постфикса дана как{ X tmp = r; ++r; return tmp; }, предполагая, что выходные итераторы не могут сделать недействительными (копии) старых значений итераторов.

Итак, может ли увеличение изменяемого входного итератора сделать недействительными старые копии итератора?

Если да, то как бы вы поддерживали такой код, какX a(r++); *a = t или жеX::reference p(*r++); p = t с (например) прокси-объектом?

Если нет, то почемуboost::iterator утверждать, что нужен прокси-объект? (Ссылка является кодом; прокрутите вниз, чтобы прочитать комментарииstructswritable_postfix_increment_proxy а такжеpostfix_increment_result). То есть, если вы можете вернуть (разыменованную) копию старого значения итератора, зачем вам нужно оборачивать эту копию в прокси?

Ответы на вопрос(2)

Ваш ответ на вопрос