当前位置: 首页 > 知识库问答 >
问题:

如何使consteval函数失败?

胡飞舟
2023-03-14

我有以下功能:

template <size_t TSize>
consteval size_t indexOf(SomeEnum someEnum,
                         const std::array<SomeEnum, TSize> &arr) {
  for (size_t i = 0; i < TSize; ++i) {
    if (arr[i] == someEnum) {
      return i;
    }
  }
  // How to fail here?
  return SOME_DEFAULT_WRONG_VALUE;
}

函数应该失败,而不是返回默认值,但我不能抛出异常或调用assert。我可以在对函数的每次调用中添加static_assert(如果使用宏,就不那么可怕了),但我更喜欢在函数中工作的解决方案。在这样的场景中有没有方法触发编译失败?

共有1个答案

尉迟正平
2023-03-14

您应该避免使用索引,而是使用std::find,即现在的constexpr。但是,如果不能这样做,那么只需返回tsize;它应该像结束迭代器一样工作。

 类似资料:
  • 问题内容: 我正在尝试使用该功能。我已经将字符串类型time格式化为datetime 我定义了搜索开始时间和结束时间: 然后我打电话 这是我得到的错误: 请如何解决。谢谢 问题答案: 示例-我使用评论中的信息: 结果:

  • 我使用下面的逻辑来计算python列表中的平均时间增量。 以下是该函数的输入:- 然而,我得到了下面的错误。 在prepare_llog(llog_pd)288 289 result_df[‘输入率’]=\-- ##############################################################################################

  • 下面是我认为基于我看到的javafx示例可以工作的方法,但是在(ctla.match(ke))上出现了一个错误,指向“match”并说“Identifier expected但'match'found”。任何指向具有复杂键事件处理的scalafx示例的链接都将受到赞赏。

  • 此代码编译没有任何问题Qt5.2.0 MSVC2012: 但是如果我试着用Qt5编译它。2.0使用gcc时,我遇到以下错误: ../_测试夹具B/主。cpp:在函数“int main(int,char**)”中:/_测试夹具B/主。cpp:14:5:警告:lambda表达式仅适用于-std=c 11或-std=gnu 11[默认情况下启用]});^/_测试夹具B/主。cpp:14:6:错误:调用'

  • 损失函数 1. 二分类 在二分类问题中,目标$y$只能取两个值。在本节笔记中,我们将展示如何建模这个问题,通过令$y \in{-1,+1}$,这里如果这个例子是正类的一个元素,我们说$y$是$1$,如果这个例子是负类的一个元素,我们说$y = - 1$。和往常一样,我们假设我们的输入特征$x \in \mathbb{R}^{n}$。 和我们处理监督学习问题的标准方法一样,我们首先为我们的假设类选择

  • 问题内容: 我非常想使用Map.computeIfAbsent,但是自从lambdas进入本科以来已经太久了。 几乎 直接来自文档:它给出了做事的旧方法的示例: 和新方法: 但是在他们的示例中,我认为我不太“了解”。我将如何转换代码以使用新的lambda表达方式? 问题答案: 假设您有以下代码: 然后,您将看到消息恰好一次,就像在第二次调用时已经存在该键的值一样。的在λ表达式仅仅是该地图将传递到您