为什么会导致分段错误?
#include <iostream>
#include <functional>
using namespace std;
int main() {
function<int(int,int)> hcf = [=](int m, int n)mutable->int{
// cout << "m: " << m << " n: " << n << endl;
if(m<n) return hcf(n,m);
int remainder(m%n);
if(0 == remainder) return n;
return hcf(n,remainder);
};
cout << hcf(10,15) << endl;
return 0;
}
我添加了mutable
关键字。不应该通过价值传递工作吗?为什么这需要传递引用?是因为我递归地呼叫hcf
吗?
答案 0 :(得分:5)
闭包对象在hcf
之前初始化,因为它是hcf
的初始化程序。即使您的代码不会调用UB,您仍然会将hcf
仍然为空的状态复制到闭包对象的成员变量中。随后调用它将导致调用空function
。
当您通过引用捕获时,这不再是问题,因为首次使用引用(即第一次调用闭包对象),hcf
已经正确初始化。