У меня есть некоторый (C++ 14) код, который выглядит следующим образом:
map<int, set<string>> junk;
for (int id : GenerateIds()) {
try {
set<string> stuff = GetStuff();
junk[id] = stuff;
} catch (const StuffException& e) {
...
}
}
Это работает. Иногда GetStuff()
генерирует исключение, которое работает нормально, потому что, если это так, я не хочу, чтобы значение в карте мусора тогда.
Но сначала я написал это в цикле, который не работает:
junk[id] = GetStuff();
Точнее, даже когда GetStuff()
генерирует исключение, создается junk[id]
(и ему назначается пустой набор).
Это не то, что я ожидал: я ожидал, что они будут функционировать так же.
Есть ли здесь какой-то принцип C++, который я неправильно понял?