gpt4 book ai didi

c++ - 无法在 lambda 中按值捕获随机分布和生成器?

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

下面的代码可以正常工作

#include <iostream>
#include <random>

int main() {
std::default_random_engine generator;
std::normal_distribution<double> distribution(5.0, 2.0);
std::vector<double> v(100);

std::generate(v.begin(), v.end(), [&] () { return distribution(generator); });

return 0;
}

但是,将 lambda 的捕获列表更改为 [=][&, distribution][&, generator] 会导致

rand.cpp:9:59: error: no matching function for call to object of type 'const std::normal_distribution<double>'
error: assigning to 'double' from incompatible type 'void'

在 lambda 中是否有某些类型的对象不能被值捕获?

最佳答案

看起来像std::normal_distribution<double>::operator()不是 const .所以你必须添加 mutable lambda 的关键字:

std::generate(v.begin(), v.end(), [=] () mutable { 
return distribution(generator);
});

std::generate(v.begin(), v.end(), [&, distribution] () mutable {
return distribution(generator);
});

这些都很好。

关于c++ - 无法在 lambda 中按值捕获随机分布和生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45913003/

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