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 lesenstructs 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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage