最佳答案
在下面的代码中,对 foo
的第一个调用是不明确的,因此无法编译。
第二个,在 lambda 之前加入 +
,解析为函数指针过载。
#include <functional>
void foo(std::function<void()> f) { f(); }
void foo(void (*f)()) { f(); }
int main ()
{
foo( [](){} ); // ambiguous
foo( +[](){} ); // not ambiguous (calls the function pointer overload)
}
+
符号在这里做什么?