【发布时间】:2012-11-03 19:21:40
【问题描述】:
当推断的返回类型为 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;
}
【问题讨论】:
-
好吧,nullptr 与 void* 是协变的,所以应该没问题。
-
它有什么“禁忌”?函数指针在哪里?
-
@Lightness:我认为他的意思是您不能将第二个 lambda 分配给
void* (pf)()。 -
@Xeo:好的,我支持你。他没想到推断的返回类型是兼容的,这对于真正的函数指针会是正确的。
标签: c++ lambda c++11 implicit-conversion std-function