当您复制一个随机数生成器和随机数分布时会发生什么?

17

在这段代码中:

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个回答

12
当您复制一个引擎或分布时,保证这两个引擎(或分布)从那一点开始生成相同的值序列。
对于引擎,标准要求E(x)将产生一个与x相等的引擎(26.5.1.4,表117)。如果未来对引擎的无限次调用将产生相同的值序列,则引擎比较相等(26.5.1.4)。
对于分布,它们需要满足CopyConstructible的要求(26.5.1.6p4)(表21)。这要求创建的对象与原始对象相当。分布进行比较相等的要求(26.5.1.6,表118)是它们具有相同的参数,并且(如果使用等效的引擎)生成的未来值序列相同。

移动引擎怎么样,例如第3个案例? - BeeOnRope

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接