复制随机数引擎和随机数分布时会发生什么?

时间:2013-06-04 12:16:03

标签: c++ c++11

在此代码中:

std::default_random_engine e;
std::default_random_engine e2 = e;                        //1
std::default_random_engine e3(e2);                        //2
std::default_random_engine e4(std::move(e3));             //3

std::uniform_real_distribution<double> d(0,1);
std::uniform_real_distribution<double> d2 = d;            //4
std::uniform_real_distribution<double> d3(d2);            //5
std::uniform_real_distribution<double> d4(std::move(d3)); //6

你能解释一下1到6个案件到底发生了什么吗?我没有在任何地方看到这些类的复制赋值,复制构造和移动构造。

特别是:当我们从另一个创建新的引擎/分发时,它是重置还是从中断的地方继续

1 个答案:

答案 0 :(得分:12)

当你复制引擎或发行版时,保证两个引擎(或发行版)将从该点生成相同的值序列。

对于发动机,标准要求E(x)将产生一个比较等于x的发动机(26.5.1.4,表117)。如果对引擎的未来调用的无限序列将产生相同的值(26.5.1.4),则引擎比较相等。

对于分发,它们是必需的(26.5.1.6p4)以满足CopyConstructible的要求(表21)。这要求创建的对象与原始对象等效。比较相等的分布(26.5.1.6,表118)的要求是它们具有相同的参数,并且生成的未来值序列(如果使用等效引擎)是相同的。