Ros*_*hta 6 c++ lambda auto c++14
我正在学习使用const的C++ 14 lambdas,今天我的朋友向我展示了以下内容.我无法理解.
它是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;
}
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 的定义和执行(因此()后面的部分[&]是可选的,在这种情况下,省略).
所以,x是int(一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).