我有一些(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 ++原理吗?