名前空間
変種

std::random_device::random_device

提供: cppreference.com
 
 
 
擬似乱数生成
一様ランダムビットジェネレータ
エンジンとエンジンアダプタ
非決定的なジェネレータ
分布
一様分布
ベルヌーイ分布
ポアソン分布
正規分布
標本分布
シードシーケンス
(C++11)
C のライブラリ
 
 
<tbody> </tbody>
random_device() : random_device(/*implementation-defined*/) {}
(1) (C++11以上)
explicit random_device(const std::string& token);
(2) (C++11以上)
random_device(const random_device& ) = delete;
(3) (C++11以上)
1) 処理系定義の token を使用して、新しい std::random_device オブジェクトをデフォルト構築します。
2) 指定されていれば引数 token を処理系定義の方法で使用して、新しい std::random_device オブジェクトを構築します。
3) コピーコンストラクタは削除されています。 std::random_device はコピー可能でもムーブ可能でもありません。

例外

失敗した場合は std::exception から派生した処理系定義の例外を投げます。

ノート

libstdc++ の実装は token がランダムバイトのソースの名前を表すことを期待します。 取り得る token の値には "default""rand_s""rdseed""rdrand""rdrnd""/dev/urandom""/dev/random""mt19937" および mt19937 エンジンのシードを指定する整数文字列があります。 ("default" 以外の token の値は特定のターゲットに対してのみ有効です。)

libc++ の実装は、ソースとしてキャラクタデバイスを使用するようにコンフィグレーションされているときは、 token が読み込んだときに乱数を生成するキャラクタデバイスの名前を表すことを期待します。 そうでなければ token"/dev/urandom" であることを期待します。

欠陥報告

以下の動作変更欠陥報告は以前に発行された C++ 標準に遡って適用されました。

DR 適用先 発行時の動作 正しい動作
P0935R0 C++11 default constructor was explicit made implicit

Linux で利用可能な一般的な2種類の std::random_device をデモンストレーションします。

#include <iostream>
#include <random>

int main()
{

    std::uniform_int_distribution<int> d(0, 10);

    std::random_device rd1; // RDRND または /dev/urandom を使用します。
    for(int n = 0; n < 10; ++n)
        std::cout << d(rd1) << ' ';
    std::cout << '\n';

    std::random_device rd2("/dev/random"); // Linux ではより遅くなります。
    for(int n = 0; n < 10; ++n)
        std::cout << d(rd2) << ' ';
    std::cout << '\n';
}

出力例:

7 10 7 0 4 4 6 9 4 7 
2 4 10 6 3 2 0 6 3 7