【问题标题】:C++: lambda-expression in unevaluated contextC++:未计算上下文中的 lambda 表达式
【发布时间】:2018-10-10 06:53:45
【问题描述】:

我正在关注this 的回答,用 lambda 函数定义一个 priority_queue。但是,我正在运行:错误:未评估上下文中的 lambda 表达式

#include <bits/stdc++.h>

int main()
{
    std::priority_queue<
        int,
        std::vector<int>,
        decltype( [](int a, int b)->bool{
                   return a>b;
        })>
         q;
}

【问题讨论】:

  • 至于您的问题,简单的解决方案是只为 lambda 使用一个变量。如您链接到的答案所示。无论如何,您都需要它,因为您需要将比较器“函数”作为参数传递给 std::priority_queue 构造函数。
  • @Someprogrammerdude 我通常不使用它。但我只是在练习 STL,所以如果你只是想玩它会更方便。我不在大型项目中使用它。
  • 哦!我想我看到了我的问题,我没有将比较器 lambda 传递给构造函数!在上面的例子中错过了!

标签: c++ c++11 stl


【解决方案1】:

您的代码是有效的 C++20,但无效的 C++11。

  • 在 C++20 之前的未计算上下文(例如 decltype)中不允许使用 Lambda 表达式。
  • 在 C++20 之前,闭包类型不可默认构造。在 C++20 中,没有捕获的闭包类型是默认可构造的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 2019-09-07
    相关资源
    最近更新 更多