通用Lambda和一元+运算符

据我了解,lambda表达式之前的+运算符将其解析为函数指针重载。 (Post

但是我不十分了解为什么它不适用于通用lambda。例如:

auto foo = +[](int a) { std::cout << "foo " << a << std::endl; };  // Valid

auto bar = +[](auto a) { std::cout << "bar " << a << std::endl; }; // Fails 

// compiler error: 
// no match for ‘operator+’ (operand type is ‘main()::<lambda(auto:1)>’)

这背后的直觉是什么?

Live example

tianjing_anbey 回答:通用Lambda和一元+运算符

因此,问题出在(自动a)。如果没有lamda,效果会如何?

那你应该写一个方法

void FuncFirst(int a) { std::cout << "foo " << a << std::endl; }

然后使用

auto foo = $FuncFirst;

因此,第二个示例似乎很奇怪:

void FuncSecond(auto a) { std::cout << "bar " << a << std::endl; } <-- So,how parameter can be "auto"? 

“自动”应在编译过程中解决。 如果将其发送到其他方法并使用不同的参数元组调用它将是什么?这太不确定了。 如果您要创建一种方法,可以接受与使用其他参数不同的参数,则可以使用它们。 (或者也许可以使用int?=))

本文链接:https://www.f2er.com/3140336.html

大家都在问