初始化常量变量,如果失败则断言(C ++)

TM值

我想用来自地图的值初始化const变量,并想断言地图是否不包含这样的值。

有什么优雅的方法可以做到这一点吗?

我希望c ++ternary operator ?:可以帮助我解决这个问题,但是此代码无法正常工作,因为ternary operator双方都希望使用相同的类型。

const auto it = modeMap.find(key);
const Mode myMode = (it != modeMap.end()) ? myMode = it->second : assert(false && "Mode doesn't exist"); 

错误C2440:“正在初始化”:无法从“无效”转换为“常量模式”

juanchopanza

如果您愿意assert为了引发异常而使用(可能是个好主意)进行交易,则可以通过调用std::map::at以下代码来简化代码

const Mode myMode = modeMap.at(key);

std::out_of_range如果key不在地图中,则会增加如果确实需要assert,则可以将逻辑包装在一个函数中:

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);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

未使用的常量变量模板的默认初始化

在C ++类中初始化大量变量

如果用常量初始化,@State 变量不能更改

初始化列表中常量变量的“this”关键字

如何分配 N(非常量变量)对的向量并初始化它们?

使用所有默认值初始化记录类型的常量变量

为什么在声明常量变量后就不可能对其进行初始化?

c 中的 sizeof 初始化常量

唯一的ptr初始化断言失败

是变量初始化失败吗?

int变量初始化功能失败

C,变量初始化

Resque任务总是失败-未初始化的作业常量?

当可能有两个以上的值时,初始化常量变量的更简洁方法是什么

在 C 中初始化指向常量对象的常量指针

为什么未初始化的constexpr变量不是常量?

Python使用初始化文件和默认常量文件中的变量初始化类

如何初始化共享复杂初始化代码的多个常量成员变量?

C ++如果值来自成员变量,则复制初始化与const参考初始化之间的区别

从常量查找表初始化常量

如果失败,Kotlin 对象需要再次初始化

SQL,游标一次初始化,必须声明标量变量

如何快速,轻松地在Java中初始化大量变量?

C++中关于常量初始化和零初始化的顺序的矛盾定义

C ++ 11统一初始化:字段初始化器不是常量

类内部的C ++静态常量数组初始化

C ++-类型的非常量引用的无效初始化

C语言中的常量整数和数组初始化

C 中的字符常量和初始化