Macht das Inkrementieren eines veränderlichen Eingabe-Iterators alte Iteratorwerte ungültig?
Iteratoren, die die Anforderungen von Ausgabe-Iteratoren weiter erfüllen, werden aufgerufenveränderliche Iteratoren. Nichtmutable Iteratoren werden als bezeichnetkonstante Iteratoren. [24.2.1: 4]
Dies deutet darauf hin, dass Sie einen veränderlichen Eingabe-Iterator haben könnten, der die Anforderungen sowohl der Eingabe- als auch der Ausgabe-Iteratoren erfüllt.
Nach dem Inkrementieren eines Eingabe-Iterators müssen Kopien seines alten Werts nicht dereferenzierbar sein [24.2.3]. Der Standard sagt jedoch nicht dasselbe für Ausgabe-Iteratoren. Tatsächlich wird die operative Semantik für das Postfix-Inkrement als angegeben{ X tmp = r; ++r; return tmp; }
, was darauf hindeutet, dass Ausgabe-Iteratoren alte Iteratorwerte möglicherweise nicht ungültig machen (kopieren).
Kann das Inkrementieren eines veränderlichen Eingabe-Iterators alte Iteratorkopien ungültig machen?
Wenn ja, wie würden Sie Code gerne unterstützen?X a(r++); *a = t
oderX::reference p(*r++); p = t
mit (z. B.) einem Proxy-Objekt?
Wenn nicht, warum dann?boost::iterator
behaupten, es braucht ein Proxy-Objekt? (Link ist Code; scrollen Sie nach unten, um die Kommentare zu lesenstruct
s writable_postfix_increment_proxy
undpostfix_increment_result
). Wenn Sie also eine (dereferenzierbare) Kopie des alten Iteratorwerts zurückgeben können, warum müssen Sie diese Kopie in einen Proxy einschließen?