【发布时间】:2017-10-15 00:52:16
【问题描述】:
我有一个类的成员函数,它应该在一个范围内生成一个随机数。为此,我使用了 rand() 函数。该函数生成一个随机数,如下所示:
unsigned seed;
seed = time(0);
srand(seed);
std::cout << "Random Number: "<< rand() << std::endl;
函数在两个不同的对象上调用。结果是:
Random Number: 1321638448
Random Number: 1321638448
每次我调用它时都是一致的。我做错了什么?
【问题讨论】:
-
在程序中多次重新设定随机发生器的种子是非常不寻常的 - 通常你先做一次,然后再也不碰它。而
time通常具有一秒的分辨率,所以如果你在同一秒内以这种方式生成两个随机值,你会期望看到这个。 -
如果我应该只播种一次,我应该在我的主播中进行吗?我认为我不应该在类构造函数中这样做,因为它会被调用两次。
-
刚刚做了上面的,它工作!谢谢!
-
John,您可以在构造函数中进行延迟初始化,例如
static bool first = true; if (first) { first = false; srand(time(nullptr)); }但main建议可能更好,因为您的类可能不是 only 使用的东西随机数。 -
如果你标记它 [c++] 考虑使用来自 here 的东西来代替