std::random_device::random_device
提供: cppreference.com
<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以上) |
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 をデモンストレーションします。
Run this code
#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