C++使用Lambda初始化变量

5
#include <iostream>

using namespace std;

int main()
{

    static bool temp([]{ 
        cout <<"Hi ";
        return false;});


   cout <<"temp "<< temp;

   return 0;
}

它不会执行lambda表达式。但是,如果我们像这样单独声明lambda表达式:
#include <iostream>

using namespace std;

int main()
{
    auto lambda = []{ 
        cout <<"Hi ";
        return false;};

    static bool temp(lambda());


   cout <<"temp "<< temp;

   return 0;
}

它将执行它。我在这里漏掉了什么?


3
在第一个例子中,你没有调用它。 - David G
1
尝试将 [] 更改为 [=],看看会发生什么。 - Kostas
1个回答

12

你需要调用lambda,就像第二个代码片段那样。

static bool temp([]{ 
    cout <<"Hi ";
    return false;}());
//                ^^

直播


PS: 在第一个代码片段中,temp总是被初始化为true,因为没有捕获列表的lambda表达式可以隐式地转换为函数指针;这是一个非空指针,然后可以转换为值为truebool类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接