Przypisanie różnic do podwójnie zwiększonego OutputIteratora
Na pytanie (doskonałe)Wymagania post-inkrementacyjne C ++ OutputIterator, obserwujemy, że dla wartości dereferencyjnej i przyrostowejr
zOutputIterator
rodzajX
i wartośćo
odpowiedniego typu, wyrażenie
*r++ = o;
jest poprawny i ma równoważną semantykę
X a(r);
++r;
*a = o;
Czy jednak nadal tak jesta
jest możliwe do przypisania, jeślir
został zwiększony więcej niż raz w tym okresie; to znaczy, czy ten kod jest ważny?
X a(r);
++r;
++r;
*a = o;
Trudno jest zobaczyć, jak operacje na wartości mogą mieć wpływ na ważność operacji na innej wartości, ale np.InputIterator
(24.2.3) ma, w warunkach post++r
:
Wszelkie kopie poprzedniej wartościr
nie są już dłużej wymagane ani do wyłuskiwania, ani do bycia w domenie==
.
Odpowiednie sekcje:24.2.2 Iterator, 24.2.4 Iteratory wyjściowe, 17.6.3.1 Wymagania dotyczące szablonów.
Również jeśli tak jestnie wymagane, aby były ważne, czy są jakieś sytuacje, w których wykorzystanie jej nieważności pomogłoby we wdrożeniu (efektywność, prostota)OutputIterator
typ przy jednoczesnym przestrzeganiu istniejących wymagań?