Val*_*lea 7 c++ lambda implicit-conversion c++11 std-function
当推断的返回类型是std :: nullptr_t时,为什么允许第二个赋值?使用函数指针,这是禁止的.
为什么第二个lambda不运行?
#include <cstdio>
#include <functional>
int main()
{
std::function<void* ()> f;
f = []() -> void* {
printf ("runs\n");
return nullptr;
};
f();
f = []() {
printf ("doesn't run\n");
return nullptr; // -> std::nullptr_t
};
f();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
std::function
允许您存储任何内容,只要以下内容适用于您提供的签名:
std::nullptr_t
可隐式转换为任何指针类型,并产生该指针类型的空指针值.
请注意,您的代码实际上并不是有效的C++ 11,因为您不仅return expr;
在第二个lambda中有一个,因此不会发生返回类型推导.GCC(和Clang,IIRC)将此作为扩展,因为它将在某个时候成为标准的一部分.