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