c++ - 通过引用辅助函数传递随机数生成器 mt19937 是否正确?

标签 c++ c++11 random

int helper( mt19937& generator ){ 

    do stuff; 
    return 0; 

}

#include "helper.h" 
// helper function defined in separate source file and included in header

mt19937 generator(time(NULL));

int main( ) {

    help(generator);

}

创建并播种 mt19937 随机数生成器,然后通过引用将其传递给函数使用是否正确?

我这样做是因为我知道我应该只为 mt19937 播种一次。但是我在单独的源文件中有很多辅助函数需要使用随机数生成器。例如。具有随机播放功能。

最佳答案

是的,通过引用传递生成器是正确的。 mt19937 的内部状态需要修改才能获得下一个随机数。如果您要按值传递生成器,那么您将复制该状态,然后多个函数将最终获得相同的随机数。这也是您不能通过 const& 传递它的原因,因为如果它是 const,它将无法修改该内部状态。

关于c++ - 通过引用辅助函数传递随机数生成器 mt19937 是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41171120/

相关文章:

c# - 按字段排序列表,然后随机排序

c++ - 通过引用传递 map<int, vector>

c++ - 如何使用 Visual Studio 2005 设置 Google C++ 测试框架 (gtest)

c++ - 等待时销毁 condition_variable

c++ - 当 auto 用于数组时,为什么它被转换为指针而不是引用?

C++ 舍入随机 double

C# 乘以包含 Random.next 实例的方法

c++ - 了解如何手动发出处理器指令

c++ - 动态和静态内存分配?

c++ - 回调与 lambda