Ich habe einen (C ++ 14) Code, der so aussieht:
map<int, set<string>> junk;
for (int id : GenerateIds()) {
try {
set<string> stuff = GetStuff();
junk[id] = stuff;
} catch (const StuffException& e) {
...
}
}
Das funktioniert. Löst manchmal GetStuff()
eine Ausnahme aus, die gut funktioniert, da ich dann keinen Wert in der Junk-Map haben möchte.
Aber zuerst hatte ich das in die Schleife geschrieben, was nicht funktioniert:
junk[id] = GetStuff();
Genauer gesagt, selbst wenn GetStuff()
eine Ausnahme ausgelöst wird, junk[id]
wird sie erstellt (und eine leere Menge zugewiesen).
Das würde ich nicht erwarten: Ich würde erwarten, dass sie genauso funktionieren.
Gibt es ein Prinzip von C ++, das ich hier missverstanden habe?