gpt4 book ai didi

c++ - 我无法理解的简单 lambda 函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:00 25 4
gpt4 key购买 nike

我正在学习使用 const 的 C++14 lambda,今天我的 friend 向我展示了以下内容。我听不懂。

  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 中整数变量的名称 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)。

关于c++ - 我无法理解的简单 lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53603368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com