我不明白的简单lambda函数

时间:2018-12-03 23:13:04

标签: c++ lambda c++14 auto

我正在用const学习C ++ 14 lambda,今天我的朋友向我展示了以下内容。我不明白。

  1. 这是lambda函数吗?语法与我通常看到的不符。

  2. 它的语法与lambda函数匹配,但由于出现长错误而失败。

int main()
{
    // 1.
    const auto x = [&]{
        auto l = 0;
        l = 99;
        return l;
    }();

    std::cout << x << endl;

    // 2.    
    const auto y = [&](){
        auto l = 0;
        l = 99;
        return l;
    };

    std::cout << y << endl;   

    return 0;
}

我想知道1是什么,为什么2无法编译。

1 个答案:

答案 0 :(得分:16)

  

我想知道1.什么以及为什么2.无法编译。

(1)

const auto x = [&]{
        auto const_val = 0;
        const_val = 99;
        return const_val;
    }();
// ..^^  <--- execution

这是不接收参数的lambda的定义执行(因此()之后的[&]部分是可选的,在这种情况下,省略了)

所以xint(由lambda返回的值)初始化的const int(一个99

如您所见,lambda内的整数变量的名称const_val是伪造的,因为该变量是用0初始化的,然后对其进行了修改,为其分配了值99

(2)

const auto y = [&](){
auto l = 0;
l = 99;
return l;
};

这是不接受任何参数的lambda的唯一定义(不执行)。

所以y是一个变量(很好,是一个常数),其中包含lambda以及您编写时的

std::cout << y << endl; 

由于未定义lambda的输出,因此会出现错误;您应该尝试

std::cout << y() << endl;

执行lambda并打印返回的值(再次99)。