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 的每个案例中到底发生了什么吗?我没有在任何地方看到这些类的复制分配、复制构造和移动构造。

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

4

1 回答 1

12

当您复制引擎或发行版时,可以保证两个引擎(或发行版)从那时起将生成相同的值序列。

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

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

于 2013-06-04T12:32:10.617 回答