下面的代碼工作正常無法通過lambda中的值捕獲隨機分配和生成器?
#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;
}
然而,改變拉姆達的捕獲列表[=]
或[&, 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'
是否有一些類型的對象不能用價值捕獲拉姆達?
感謝您的解釋,該錯誤信息只是有點難以理解。對於任何內置類型,總是使用'&'是好習慣嗎? – Edityouprofile
@displayname - 這取決於,但是,在這種特殊情況下,你肯定不想處理'generator'的副本。 – rustyx