简单的lambda函数我无法理解

Ros*_*hta 6 c++ lambda auto c++14

我正在学习使用const的C++ 14 lambdas,今天我的朋友向我展示了以下内容.我无法理解.

  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;
}
Run Code Online (Sandbox Code Playgroud)

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

max*_*x66 16

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

(1)

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

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

所以,xint(一const int)与初始化99(由氧返回的值)

正如您所看到的,const_vallambda中整数变量的名称是假的,因为该变量是初始化的0,然后修改为其赋值99.

(2)

const auto y = [&](){
auto l = 0;
l = 99;
return l;
};
Run Code Online (Sandbox Code Playgroud)

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

所以y是一个包含lambda的变量(嗯,一个常量),当你写的时候

std::cout << y << endl; 
Run Code Online (Sandbox Code Playgroud)

你得到一个错误,因为没有定义lambda的输出; 你应该试试

std::cout << y() << endl;
Run Code Online (Sandbox Code Playgroud)

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