tem*_*boy 5 c++ lambda function-pointers c++11
如果我有一个lambda,它通过reference([&] {})捕获所有自动变量,为什么不能将它转换为函数指针?常规函数可以修改变量,就像lambda一样,可以通过引用捕获所有内容,为什么它不一样?
我想换句话说,lambda与&捕获列表和常规函数之间的功能差异是什么,使得lambda不能转换为函数指针?
Bar*_*rry 10
让我们以一个普通的lambda为例:
Object o;
auto foo = [&]{ return o; };
Run Code Online (Sandbox Code Playgroud)
这种类型的foo样子是什么样的?它可能看起来像这样:
struct __unique_unspecified_blah
{
operator()() const {
return o;
}
Object& o;
};
Run Code Online (Sandbox Code Playgroud)
你能创建一个函数指针operator()吗?不,你不能.该函数需要一些来自其对象的额外信息.这与您无法将典型的类方法转换为原始函数指针(没有额外的第一个参数this)的原因相同.假设你确实创建了一些这个指针 - 它怎么知道从哪里来的o?
问题的"参考"部分是不相关的 - 如果你的lambda捕获任何东西,那么operator()它将需要在对象中引用某种存储.如果需要存储,则无法转换为原始函数指针.
| 归档时间: |
|
| 查看次数: |
411 次 |
| 最近记录: |