Kann der Operator ++ für assoziative Container einen Iterator nach dem Ende einer Sammlung senden?
Beispiel:
%Vor%Am Ende davon, ist new_iter == new_map.end (), oder endet es in der großen unbekannten?
Hinweis: Ich weiß, das ist durcheinander und nicht die Art, Dinge zu tun. Ich arbeite an einem WTF Corporate Code.
Wenn Sie den Enditerator erhöhen, ist das Ergebnis ein nicht definiertes Verhalten. So könnte es Ende bleiben, oder am Ende gehen, oder deiner Großmutter eine Verbindung zu Ziegenbock mailen.
Siehe auch: Tyler McHenry 24.08.2009, 21:09
Die Voraussetzung für den Operator ++ für einen Vorwärtsiterator ist, dass der Iterator dereferenziert werden kann. Dies bedeutet, dass es nicht über das Ende der Map hinausgehen kann, sodass Ihr Code undefiniertes Verhalten ergibt. Dies wird in Abschnitt 24.1.3 des C ++ Standards beschrieben.
Wie andere bereits erwähnt haben, verursacht das Inkrementieren des End-Iterators undefiniertes Verhalten. Es ist jedoch erwähnenswert, dass Visual Studio 2008 eine Debug-Assertion zur Laufzeit auslöst (aufgrund seiner überprüfte Iteratoren ), wenn Sie dies tun.