Betrachten Sie diesen Code:Warum drucke ich Werte außerhalb des zulässigen Bereichs?
class Foo123
{
QList<int> a = (QList<int>()) << 1 << 2 << 3;
QList<int>::const_iterator it;
public:
Foo123()
{
it = a.begin();
}
void print()
{
qDebug() << *it;
while(move())
{
qDebug() << *it;
}
}
bool move()
{
if(it != a.end())
{
++it;
return true;
}
return false;
}
};
Foo123 f;
f.print();
Ich bin immer eine zusätzliche Zahl am Ende des Druckens erhalten, wie folgt aus:
1
2
3
58713 // this is random, from what I can tell
Ich glaube, ich bin Wert des Bereichs Druck, aber ich didn verstehe nicht wie. Kann jemand auf meinen Fehler hinweisen?
der Iterator werden überprüft, bevor Sie es erhöhen. Sie drucken grundsätzlich 'a.end()' als letzten Wert. – vu1p3n0x
Es kann Verwirrung geben, dass 'a.end()' nicht auf das letzte Element zeigt, sondern ein "past-the-end" Iterator ist und nicht dereferenziert werden sollte. – vu1p3n0x
@ vu1p3n0x: Ich glaube, ich habe übersehen, dass a.end() nicht auf das letzte Element zeigt ... – Jack