如果我有一个通过引用捕获所有自动变量的 lambda ([&] {}
),为什么它不能转换为函数指针?常规函数可以修改变量,就像通过引用捕获所有内容的 lambda 一样,那么为什么不一样呢?
换句话说,我想,具有 &
捕获列表的 lambda 与常规函数之间的功能区别是什么,以至于 lambda 不能转换为函数指针?
最佳答案
让我们以一个简单的 lambda 为例:
Object o;
auto foo = [&]{ return o; };
foo
的类型是什么样的?它可能看起来像这样:
struct __unique_unspecified_blah
{
operator()() const {
return o;
}
Object& o;
};
你能创建一个指向那个 operator()
的函数指针吗?不,你不能。该函数需要一些来自其对象的额外信息。这与您无法将典型的类方法转换为原始函数指针的原因相同(没有 this
所在的额外第一个参数)。假设您确实创建了一些 this 指针 - 它如何知道从哪里获取 o
?
问题的“引用”部分不相关 - 如果您的 lambda 捕获任何东西,那么它的operator()
将需要引用目的。如果它需要存储,它不能转换为原始函数指针。
关于c++ - 为什么通过引用捕获变量的 lambda 不能转换为函数指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26692007/