"+" cpp lambda 声明中是什么意思"auto fun1 = +[](){};"



我在stackoverflow中看到,人们这样写lambda:

int main() {
auto f1 = +[](){};    
auto f2 = [](){};
return 0;
}

(1(+f1表达中的实际作用是什么?我尝试添加捕获,然后f1没有编译,但错误对我来说是不可读的:

auto f1 = +[=](){};  // fail to compile
auto f2 = [=](){};

错误为:

invalid argument type '(lambda at .xxx.cpp:4:16)' to unary expression
auto f1 = +[=](){};

(2( 这个错误表示什么?

谢谢。

lambda具有编译器生成的类型。如果您只是将lambda按原样分配给auto变量,那么auto变量的类型将被推断为lambda的生成类型。

非捕获lambda是隐式可转换为普通函数指针。通过将+放在lambda前面,lambda被显式地转换为函数指针,然后auto变量的类型将被推导为函数指针类型,而不是lambda类型。

捕获lambda的根本无法转换为函数指针,这就是出现编译器错误的原因。

(1(它将不带捕获的lambda转换为函数指针。

(2( 它表示您将按值捕获,在这种情况下,无法转换为函数指针。

最新更新