在此代码中:
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个案件到底发生了什么吗?我没有在任何地方看到这些类的复制赋值,复制构造和移动构造。
特别是:当我们从另一个创建新的引擎/分发时,它是重置还是从中断的地方继续?
答案 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)的要求是它们具有相同的参数,并且生成的未来值序列(如果使用等效引擎)是相同的。