我想用 map 中的值初始化 const 变量,并想断言 map 是否不包含这样的值。
有什么优雅的方法可以做到这一点吗?
我希望 c++ 三元运算符 ?:
能帮助我解决这个问题,但这段代码不起作用,因为 三元运算符
希望两边都具有相同的类型。
const auto it = modeMap.find(key);
const Mode myMode = (it != modeMap.end()) ? myMode = it->second : assert(false && "Mode doesn't exist");
error C2440: 'initializing' : cannot convert from 'void' to 'const Mode'
最佳答案
如果您愿意用 assert
来换取异常(无论如何可能是个好主意),您可以通过调用 std::map::at
来简化您的代码:
const Mode myMode = modeMap.at(key);
如果 key
不在 map 中,这将引发 std::out_of_range
。如果你真的真的需要断言
,那么你可以将逻辑包装在一个函数中:
const Mode& find_or_assert(const std::map<Key, Mode>& modeMap, const Key& key)
{
auto it = modeMap.find(key);
assert(it != modeMap.end());
return it->second;
}
然后
const Mode myMode = find_or_assert(modeMap, key);
关于c++ - 初始化常量变量并在失败时断言 (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33253599/