1

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

但是我不太明白为什么它不适用于通用 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)>’)

这背后的直觉是什么?

活生生的例子

4

1 回答 1

0

所以,问题出在(auto a)中。如果你没有lamdas会是什么样子?

然后你应该写一个方法

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"? 

“auto”应该在编译期间解决。如果您将它发送到其他方法并使用不同的参数元组调用它会怎样?它的不确定性太大。如果要创建可以接受不同参数的方法,则可以使用模板。(或者您可以使用 int 吗?=))

于 2019-11-08T05:04:49.630 回答