我无法理解的简单 lambda 函数

Simple lambda function I could not understand

我正在学习使用 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编译失败

I wanted to know what is 1. and why 2. fails to compile.

(1)

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

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

所以x是一个int(一个const int)初始化为99(lambda返回的值)

如您所见,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)。