2013-06-04 5 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)を生成する場合、エンジンは等しいと比較します。

配布の場合は、CopyConstructible(表21)の要件を満たすために必要です(26.5.1.6p4)。これは、作成されたオブジェクトがオリジナルと同等であることを必要とします。等しい(26.5.1.6、表118)と比較する分布の要件は、それらが同じパラメータを有し、生成される値の将来のシーケンス(等価エンジンを使用する場合)が同じであるということである。

関連する問題