Делает ли увеличение изменяемого итератора ввода недействительными старые значения итератора?

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утверждают, что ему нужен прокси-объект? (Ссылка является кодом; прокрутите вниз, чтобы прочитать комментарии к structs writable_postfix_increment_proxyиpostfix_increment_result). То есть, если вы можете вернуть (разыменовываемую )копию старого значения итератора, зачем вам нужно оборачивать эту копию в прокси?

9
задан Lightness Races with Monica 17 November 2014 в 13:19
поделиться