c++ - 初始化常量变量并在失败时断言 (c++)

标签 c++ c++11

我想用 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/

相关文章:

C++:重载 = 运算符以创建 uint8_t 兼容数据类型

c++ - c++继承:基类中的2次重载operator +在派生类中无法正常工作

c++11 - VS2015 的链式 std::bind 编译错误

c++ - 如何使用嵌套初始化构造函数中的一维 vector 初始化矩阵?

c++ - 体系结构 x86_64 : error of compilation 的 undefined symbol

Java 传值和类对象的 C++ 指针调用效果一样吗?

c++ - 不断收到错误 ' no match for ' operator>>' ;

c++ - 修改继承的成员变量不会影响基类

c++ - 如何使用 clang 在 Mac OS X 上获得新的 C++ 线程支持?

c++ - C++ std::string 平台独立吗?