我无法理解的简单 lambda 函数
Simple lambda function I could not understand
我正在学习使用 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编译失败
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
)。
我正在学习使用 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编译失败
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
)。