gpt4 book ai didi

c++ - std::random_device 在播种伪随机引擎后是否应该保持事件状态?

转载 作者:搜寻专家 更新时间:2023-10-31 02:24:12 25 4
gpt4 key购买 nike

典型的现代获取随机数的方法是这样的:

std::random_device rd;
std::mt19937 engine{rd()};
std::uniform_int_distribution<> dis{-10,10};

someInt = dis(engine);

我认为 std::random_device 对象仅用于为伪随机引擎播种一次。因此我认为我们可以这样写:

std::mt19937 engine{std::random_device{}()};
std::uniform_int_distribution<> dis{-10,10};

someInt = dis(engine);

后者不会让 std::random_device 对象保持事件状态,并且具有减轻命名的痛苦的优点。但是我发现网上很多例子都是用以前的版本。

保持 std::random_device 对象存活并为其命名是必须的,还是有原因的?

最佳答案

您可以看到 std::mt19937 的构造函数采用单个 result_type 参数,此处:http://www.cplusplus.com/reference/random/mersenne_twister_engine/mersenne_twister_engine/该页面还指出 result_type 是第一个模板参数,对于 std::mt19937uint_fast32_t。该参数取值。

从上面我们可以得出结论,random_device 的生命周期没有(合理的)方式必须跨越 engine 的生命周期。欢迎您在从 random_device 中提取种子后立即销毁它。

关于c++ - std::random_device 在播种伪随机引擎后是否应该保持事件状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28334972/

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