【发布时间】:2017-11-23 15:02:14
【问题描述】:
我的构造函数有什么问题?每次我调用一个应该生成随机数的函数(大约每五秒一次)时,它都会生成相同的数字。每个调用都会实例化以下这些对象之一。我以为我是用m_rd 的operator() 调用的输出随机播种m_gen。
我可以将m_rd() 的结果传递给构造函数吗?签名会是什么? Shuffler(std::random device& rd)?但这对用户来说会更加困难。
编辑:
实际上,如果可能的话,我更喜欢不需要向构造函数传递任何内容的解决方案。
shuffler.h
#include <random>
class Shuffler
{
private:
std::random_device m_rd;
std::mt19937 m_gen;
public:
//! The default constructor.
Shuffler();
};
shuffler.cpp
#include "shuffler.h"
Shuffler::Shuffler() : m_gen(m_rd())
{
}
【问题讨论】:
-
一个 random_device 是 not 一个种子序列。
-
您是否偶然使用了 MinGW?我相信
std::random_device没有该编译器的有用实现。见stackoverflow.com/q/18880654/10077 -
如果
random_device是一个总是返回相同序列的伪随机生成器,那么每次都会得到相同的值,因为每次都创建一个新实例。如果您将m_rd设为静态,则可以解决该问题。
标签: c++ random constructor std mersenne-twister