我正在用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无法编译。
答案 0 :(得分:16)
我想知道1.什么以及为什么2.无法编译。
(1)
const auto x = [&]{
auto const_val = 0;
const_val = 99;
return const_val;
}();
// ..^^ <--- execution
这是不接收参数的lambda的定义和执行(因此()
之后的[&]
部分是可选的,在这种情况下,省略了)
所以x
是int
(由lambda返回的值)初始化的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
)。