【问题标题】:Simple lambda function I could not understand我无法理解的简单 lambda 函数
【发布时间】:2018-12-03 23:13:03
【问题描述】:
我正在使用 const 学习 C++14 lambda,今天我的朋友向我展示了以下内容。没看懂。
它是 lambda 函数吗?语法与我通常看到的不符。
它的语法与 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编译失败。
【问题讨论】:
标签:
c++
lambda
c++14
auto
【解决方案1】:
我想知道什么是 1. 以及为什么 2. 无法编译。
(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)。