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 tematstruct
s 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?