如果我有一个通过引用捕获所有自动变量的 lambda ([&] {}
),为什么不能转换为函数指针呢?常规函数可以像通过引用捕获所有内容的 lambda 一样修改变量,那么为什么不一样呢?
换句话说,我想 lambda 和 a 之间的功能区别是什么?&
捕获列表和常规函数,使得 lambda 无法转换为函数指针?
让我们以一个简单的 lambda 为例:
Object o;
auto foo = [&]{ return o; };
类型是什么foo
看起来像?它可能看起来像这样:
struct __unique_unspecified_blah
{
operator()() const {
return o;
}
Object& o;
};
你能创建一个指向它的函数指针吗operator()
?不,你不能。该函数需要一些来自其对象的额外信息。这与您无法将典型的类方法转换为原始函数指针的原因相同(没有额外的第一个参数,其中this
去)。假设你确实创建了一些 this 指针 - 它如何知道到哪里去o
from?
问题的“参考”部分不相关 - 如果您的 lambda 捕获anything,那么它的operator()
需要引用对象中的某种存储。如果需要存储,它无法转换为原始函数指针。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)