在C ++ 11标准说(或至少,我的版本 - 不是最后一个):
对于没有拉姆达捕获一个lambda表达式的闭合类型有一个公共非虚非显式const的转换功能函数指针具有相同的参数和返回类型为封闭类型的函数调用操作符。
我明白为什么它是不可能从一个状态拉姆达得到一个函数指针,因为函数指针本身不能包含任何数据。
但是,当所捕获的对象仅仅是静态成员/静态变量,不存在这样的限制,因为所捕获的对象的引用可以在函数本身是硬连线的。
struct A {
static int count = 0;
void foo() {
static int bar = 0;
auto fun = [&]()->void {
count++;
bar++;
};
void(*ptrFun)();
ptrFun = fun; // forbidden by the quoted wording
}
};
为什么不是总是可以将拉姆达只要前者是无状态的转换函数指针? 我缺少的东西或不委员会忘了这具体点吗?