2013-06-04 28 views
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?我沒有看到複製分配,複製構造以及爲任何地方記錄的這些類移動構造。

特別是:當我們從另一個創建一個新的引擎/分佈,它重置繼續離開的地方

回答

12

當您複製引擎或分配時,可以保證兩個引擎(或分配)都將從該點生成相同的值序列。

對於發動機,該標準要求E(x)將產生一個等於x的發動機(26.5.1.4,表117)。如果將來對引擎的調用的無限序列產生相同的值(26.5.1.4),則引擎比較相等。

對於分佈,它們是必需的(26.5.1.6p4)以滿足CopyConstructible(表21)的要求。這要求創建的對象將等同於原始對象。比較相等(26.5.1.6,表118)的分佈要求是它們具有相同的參數,並且生成的值的未來序列(如果使用等效引擎)是相同的。