gpt4 book ai didi

c++ - 为什么通过引用捕获变量的 lambda 不能转换为函数指针?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:59:31 24 4
gpt4 key购买 nike

如果我有一个通过引用捕获所有自动变量的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com