I have some (C++14) code that looks like this:
map<int, set<string>> junk;
for (int id : GenerateIds()) {
try {
set<string> stuff = GetStuff();
junk[id] = stuff;
} catch (const StuffException& e) {
...
}
}
This works. Sometimes GetStuff()
throws an exception, which works fine, because if it does, I don't want a value in the junk map then.
But at first I'd written this in the loop, which doesn't work:
junk[id] = GetStuff();
More precisely, even when GetStuff()
throws an exception, junk[id]
is created (and assigned an empty set).
This isn't what I'd expect: I'd expect them to function the same way.
Is there a principle of C++ that I've misunderstood here?