Czy zwiększanie zmiennego iteratora wejściowego unieważnia stare wartości iteratora?

Iteratory, które dodatkowo spełniają wymagania iteratorów wyjściowych, są nazywanezmienne iteratory. Niezmienne iteratory są określane jakostałe iteratory. [24.2.1: 4]

Sugeruje to, że można mieć zmienny iterator wejściowy, który spełnia wymagania zarówno iteratorów wejściowych, jak i wyjściowych.

Po zwiększeniu iteratora wejściowego kopie jego starej wartości nie muszą być wyodrębniane [24.2.3]. Jednak standard nie mówi tego samego dla iteratorów wyjściowych; w rzeczywistości semantyka operacyjna dla przyrostu postfixu jest podana jako{ X tmp = r; ++r; return tmp; }sugerując, że iteratory wyjściowe nie mogą unieważniać (kopiować) starych wartości iteratora.

Czy zatem zwiększanie zmiennego iteratora wejściowego unieważnia stare kopie iteratora?

Jeśli tak, w jaki sposób obsługiwałbyś kodX a(r++); *a = t lubX::reference p(*r++); p = t z (np.) obiektem proxy?

Jeśli nie, to dlaczegoboost::iterator twierdzą, że potrzebuje obiektu proxy? (Link jest kodem; przewiń w dół, aby przeczytać komentarze na tematstructs writable_postfix_increment_proxy ipostfix_increment_result). Oznacza to, że jeśli możesz zwrócić (dereferenable) kopię starej wartości iteratora, dlaczego potrzebujesz zawinąć tę kopię w proxy?

questionAnswers(2)

yourAnswerToTheQuestion