gpt4 book ai didi

c++ - 在递归 lambda 中按值捕获

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:17:44 27 4
gpt4 key购买 nike

我们可以像这样定义递归lambda函数

std::function<void(int)> fun = [&fun](int a) {  if (a) fun(a - 1); };

然后我们可以调用它

fun(10);

但是,如果我将定义更改为

std::function<void(int)> fun = [fun](int a) {  if (a) fun(a - 1); };

然后尝试调用

fun(10);

发生段错误。

谁能解释一下为什么按引用捕获有效,而按值捕获会导致段错误。

最佳答案

按值捕获作为评估 lambda 表达式的一部分进行评估。那时,fun 仍未初始化,因为您仍在评估其初始化程序。只有在那之后 fun 才被初始化,但那时复制已经发生了。

最终效果是 fun 中存储的 lambda 函数对象有一个名为 fun 的数据成员,它是未初始化的 std::function< 的拷贝 — 未定义的行为。

关于c++ - 在递归 lambda 中按值捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42813810/

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