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