QRandomGenerator Class
QRandomGeneratorクラスは、高品質の乱数生成器から乱数値を取得することができます。詳細...
Header: | #include <QRandomGenerator> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Inherited By: |
注意:このクラスのすべての関数はリエントラントです。
注意:これらの関数はスレッドセーフでもあります:
パブリック型
パブリック関数
QRandomGenerator(quint32 seedValue = 1) | |
QRandomGenerator(const quint32 (&)[N] seedBuffer) | |
QRandomGenerator(std::seed_seq &sseq) | |
QRandomGenerator(const quint32 *begin, const quint32 *end) | |
QRandomGenerator(const quint32 *seedBuffer, qsizetype len) | |
QRandomGenerator(const QRandomGenerator &other) | |
double | bounded(double highest) |
int | bounded(int highest) |
qint64 | bounded(qint64 highest) |
quint32 | bounded(quint32 highest) |
quint64 | bounded(quint64 highest) |
int | bounded(int lowest, int highest) |
qint64 | bounded(int lowest, qint64 highest) |
qint64 | bounded(qint64 lowest, int highest) |
qint64 | bounded(qint64 lowest, qint64 highest) |
quint32 | bounded(quint32 lowest, quint32 highest) |
quint64 | bounded(quint64 lowest, quint64 highest) |
quint64 | bounded(quint64 lowest, unsigned int highest) |
quint64 | bounded(unsigned int lowest, quint64 highest) |
void | discard(unsigned long long z) |
void | fillRange(UInt (&)[N] buffer) |
void | fillRange(UInt *buffer, qsizetype count) |
quint64 | generate64() |
quint32 | generate() |
void | generate(ForwardIterator begin, ForwardIterator end) |
double | generateDouble() |
void | seed(quint32 seed = 1) |
void | seed(std::seed_seq &seed) |
QRandomGenerator::result_type | operator()() |
静的パブリックメンバ
QRandomGenerator * | global() |
QRandomGenerator::result_type | max() |
QRandomGenerator::result_type | min() |
QRandomGenerator | securelySeeded() |
QRandomGenerator * | system() |
関連する非メンバー
bool | operator!=(const QRandomGenerator &rng1, const QRandomGenerator &rng2) |
詳しい説明
QRandomGenerator は、高品質の乱数生成器から乱数値を生成するために使用できます。C++ のランダムエンジンと同様に、QRandomGenerator はコンストラクタを通してユーザー提供の値でシードすることができます。シードされたとき、このクラスによって生成される数値のシーケンスは決定論的である。つまり、同じシード・データが与えられると、QRandomGeneratorは同じ数列を生成する。しかし、異なるシードが与えられると、結果はかなり異なるはずである。
QRandomGenerator::securelySeeded()は、QRandomGenerator::system()で安全にシードされるQRandomGeneratorを作成するために使用することができます。つまり、それが生成する数字のシーケンスは簡単に予測することはできません。さらに、QRandomGenerator::global()は、Qtが安全にシードされることを保証するQRandomGeneratorのグローバルなインスタンスを返します。このオブジェクトはスレッドセーフで、ほとんどの用途で共有することができ、常にQRandomGenerator::system() からシードされます。
QRandomGenerator::system()は、システムの暗号的に安全なランダムジェネレータにアクセスするために使用することができます。Unixシステムでは、/dev/urandom
またはgetrandom()
またはgetentropy()
システム・コールから読み込むのと同じです。
このクラスは、32ビットまたは64ビットの量を生成したり、それらの配列を埋めることができます。新しい値を生成する最も一般的な方法は、generate ()、generate64 ()、fillRange ()関数を呼び出すことです。として使用することになる:
quint32 value = QRandomGenerator::global()->generate();
さらに、[0, 1]の範囲(つまり、0を含み1を含まない)の数値を返す浮動小数点関数generateDouble()も用意されている。また、境界のある積分範囲の乱数を取得しやすくする便利な関数群も用意されている。
シードと決定性
QRandomGeneratorは特定のシードデータでシードすることができる。それが実行されると、オブジェクトによって生成される数値は、次の例のように、常に同じになります:
QRandomGenerator prng1(1234), prng2(1234); Q_ASSERT(prng1.generate() == prng2.generate()); Q_ASSERT(prng1.generate64() == prng2.generate64());
シードデータは1つ以上の32ビットワードの形をとる。理想的なシード・サイズはQRandomGeneratorクラス自体のサイズにほぼ等しい。シードデータの混合により、QRandomGeneratorは異なるシードが異なるシーケンスを生成することを保証することはできません。
QRandomGenerator::global(QRandomGenerator::securelySeeded() によって作成されるすべてのジェネレータのように、QRandomGenerator::system() から常にシードされるので、同一のシーケンスを生成させることはできません。
一括データ
決定論的モードで動作するとき、QRandomGeneratorはバルクデータ生成のために使用することができる。実際、暗号的に安全または真のランダムデータを必要としないアプリケーションは、ランダムデータの必要性のためにQRandomGenerator::system ()の代わりに通常のQRandomGeneratorを使用することをお勧めします。
使いやすくするために、QRandomGeneratorは以下の例のように簡単に使用できるグローバルオブジェクトを提供する:
int x = QRandomGenerator::global()->generate(); int y = QRandomGenerator::global()->generate(); int w = QRandomGenerator::global()->bounded(16384); int h = QRandomGenerator::global()->bounded(16384);
システム全体の乱数生成器
QRandomGenerator::system(この乱数ジェネレータは、Qtが動作するすべてのシステムで暗号的に安全です。この関数は、利用可能であればハードウェアの乱数生成機能を使用します。このようなシステムでは、これらの機能は真の乱数生成器です。しかし、真の乱数生成器であっても、エントロピーのソースは有限であるため、エントロピーのプールを使い果たした場合、乱数の生成に失敗する可能性があります。
そうなった場合、まずオペレーティングシステムが、次にQRandomGeneratorが、品質が低下する疑似乱数ジェネレーターにフォールバックします(Qtのフォールバックジェネレーターは最も単純です)。これらのジェネレータがまだ暗号の品質であるかどうかは、実装によって定義されます。したがって、QRandomGenerator::system() は、エントロピー・プールが空にならないように、高頻度の乱数生成には使用しないでください。経験則として、このクラスは1秒間に1キロバイト以上の乱数データを生成するために呼び出されるべきではありません(注意:これはシステムによって異なる場合があります)。
アプリケーションが真のRNGデータを大量に必要とする場合は、オペレーティング・システムの機能(Linuxの/dev/random
など)を直接使用し、エントロピーが利用可能になるのを待つべきである。アプリケーションが、真のランダム性ではなく暗号品質のPRNGエンジンを必要とする場合でも、QRandomGenerator::system ()を使用することができる(以下のセクションを参照)。
真のRNGも暗号的に安全なPRNGも必要ない場合、アプリケーションは代わりに、QRandomGeneratorの決定論的モードやC++標準ライブラリのもののようなPRNGエンジンを使用する必要があります。QRandomGenerator::system()はこれらの播種に使用できます。
フォールバック品質
QRandomGenerator::system()は、オペレーティング・システムの機能を使って乱数を取得し、周囲の環境から実際のエントロピーを集めて真の乱数を生成しようとします。しかし、エントロピー・プールが枯渇する可能性があり、その場合、オペレーティング・システムは一時的に擬似乱数エンジンにフォールバックする。どのような場合でも、QRandomGenerator::system ()がブロックされ、さらにエントロピーが収集されるのを待つことはない。
以下のオペレーティング・システムでは、エントロピー・プールが枯渇した場合でも、ランダム生成APIの結果が少なくとも暗号的に安全な品質であることを保証している:アップルOS(ダーウィン)、BSD、Linux、Windows。アップルOS(ダーウィン)、BSD、Linux、Windowsなどである。システム・インストールの問題(現在のプロセスで/dev/urandom
が読めないなど)がなければ、QRandomGenerator::system ()も同じ保証がある。
他のオペレーティングシステムでは、QRandomGeneratorは良好な数値分布のPRNGにフォールバックしますが、すべてのケースで適切なシーディングを保証することはできません。詳細についてはOSのドキュメントを参照してください。
QRandomGeneratorが非暗号化品質のジェネレータにフォールバックしないことを必要とするアプリケーションは、オペレーティングシステムのドキュメントを確認するか、上記のいずれかに展開を制限することをお勧めします。
再定常性とスレッド安全性
QRandomGeneratorはリエントラントであり、複数のスレッドが異なるオブジェクトを操作する限り、同時にこのクラスを操作できることを意味する。複数のスレッドが1つのPRNGシーケンスを共有する必要がある場合、ミューテックスによる外部ロックが必要です。
例外はQRandomGenerator::global() とQRandomGenerator::system() が返すオブジェクトである。これらのオブジェクトはスレッドセーフであり、どのスレッドでも外部ロックなしで使用できる。スレッドセーフは、これらのオブジェクトのコピーには適用されないことに注意。
標準C++ライブラリの互換性
QRandomGeneratorは、C++標準ライブラリの乱数エンジンの要件に基づいてモデル化されており、標準ライブラリのエンジンが使用できるほぼすべてのコンテキストで使用することができます。要件の例外は次のとおりです:
- QRandomGeneratorはstd::seed_seq自身以外の他のシードシーケンスに似たクラスからのシードをサポートしません;
- QRandomGenerator は
std::ostream
やstd::istream
と比較可能(コピー可能)でもストリーマブルでもない。
QRandomGenerator は一様分布クラスstd::uniform_int_distribution
とstd:uniform_real_distribution
、および自由関数std::generate_canonical
とも互換性があります。例えば、以下のコードは[1, 2.5]の範囲の浮動小数点数を生成するために使用されます:
std::uniform_real_distribution dist(1, 2.5); return dist(*QRandomGenerator::global());
QRandomGenerator64も参照してください 。
メンバ関数ドキュメント
qint64 QRandomGenerator::bounded(int lowest, qint64 highest)
qint64 QRandomGenerator::bounded(qint64 lowest, int highest)
quint64 QRandomGenerator::bounded(quint64 lowest, unsigned int highest)
quint64 QRandomGenerator::bounded(unsigned int lowest, quint64 highest)
これはオーバーロードされた関数です。
この関数は、パラメータの型が完全に一致しない場合に、オーバーロードの解決を助けるために存在する。小さい方の型を大きい方の型に昇格させ、正しいオーバーロードを呼び出す。
QRandomGenerator::QRandomGenerator(quint32 seedValue = 1)
このQRandomGeneratorオブジェクトをシードとして値seedValue で初期化する。同じシード値で構築または再シードされた2つのオブジェクトは、同じ数列を生成する。
seed() とsecurelySeeded()も参照 。
template <qsizetype N> QRandomGenerator::QRandomGenerator(const quint32 (&)[N] seedBuffer)
これはオーバーロードされた関数である。
配列seedBuffer で見つかった値をシードとして、この QRandomGenerator オブジェクトを初期化します。同じシード値で構築または再シードされた2つのオブジェクトは、同じ数列を生成します。
seed() およびsecurelySeeded()も参照 。
[noexcept]
QRandomGenerator::QRandomGenerator(std::seed_seq &sseq)
これはオーバーロードされた関数です。
シード配列sseq をシードとしてこの QRandomGenerator オブジェクトを初期化する。同じシード値で構築または再シードされた2つのオブジェクトは、同じ数列を生成します。
seed() とsecurelySeeded()も参照 。
QRandomGenerator::QRandomGenerator(const quint32 *begin, const quint32 *end)
これはオーバーロードされた関数である。
begin からend までの範囲で見つかった値をシードとして、この QRandomGenerator オブジェクトを初期化します。同じシード値で構築または再シードされた2つのオブジェクトは、同じ数列を生成します。
このコンストラクタは以下と等価である:
std::seed_seq sseq(begin, end); QRandomGenerator generator(sseq);
seed() およびsecurelySeeded()も参照のこと 。
QRandomGenerator::QRandomGenerator(const quint32 *seedBuffer, qsizetype len)
これはオーバーロードされた関数である。
配列seedBuffer で見つかったlen の値をシードとして、この QRandomGenerator オブジェクトを初期化します。同じシード値で構築または再シードされた2つのオブジェクトは、同じ数列を生成します。
このコンストラクタは以下と等価である:
std::seed_seq sseq(seedBuffer, seedBuffer + len); QRandomGenerator generator(sseq);
seed() およびsecurelySeeded()も参照 。
QRandomGenerator::QRandomGenerator(const QRandomGenerator &other)
other オブジェクトに生成状態のコピーを作成する。other がQRandomGenerator::system() またはそのコピーの場合、このオブジェクトはオペレーティングシステムのランダム生成機能からも読み込まれます。この場合、2つのオブジェクトが生成するシーケンスは異なる。
それ以外のすべての場合において、新しいQRandomGeneratorオブジェクトは、other オブジェクトがあったのと同じ決定論的シーケンスの同じ位置から始まる。両オブジェクトはこの時点から同じシーケンスを生成する。
そのため、QRandomGenerator::global()のコピーを作成することは勧められない。排他的決定性ジェネレータが必要な場合は、代わりにQRandomGenerator::global() と何の関係も持たない新しいオブジェクトを得るためにsecurelySeeded() を使用することを検討してください。
double QRandomGenerator::bounded(double highest)
0(包含)からhighest (排他的)までの範囲で、1つのランダムなdoubleを生成する。この関数は次の関数と等価であり、次のように実装される:
return generateDouble() * highest;
highest パラメータが負の場合、結果も負になる。無限または NaN の場合、結果も無限または NaN になる(つまり、ランダムではない)。
generateDouble() および bounded()も参照のこと 。
int QRandomGenerator::bounded(int highest)
これはオーバーロードされた関数である。
0(包含)~highest (排他的)の範囲内で32ビットの乱数を1つ生成する。highest は正でなければならない。
この関数は、intの全32ビット範囲の値を取得するためには使用できないことに注意。代わりに、generate ()を使用し、intにキャストする。
generate()、generate64()、generateDouble()も参照 。
qint64 QRandomGenerator::bounded(qint64 highest)
これはオーバーロードされた関数です。
0(包含)からhighest (排他的)までの範囲で、64 ビットのランダムな数量を 1 つ生成します。highest は正でなければなりません。
この関数を使用して、qint64
の 64 ビット範囲すべての値を取得することはできないことに注意してください。代わりに、generate64 ()を使用して qint64 にキャストするか、この関数の符号なしバージョンを使用してください。
注意: この関数はループとして実装されており、得られる乱数値に依存する。長い目で見れば、平均して2回弱ループするはずですが、乱数発生器に欠陥がある場合、この関数の実行にかなり時間がかかることがあります。
generate(),generate64(),generateDouble()も参照の こと。
quint32 QRandomGenerator::bounded(quint32 highest)
これはオーバーロードされた関数である。
0(包含)~highest (排他的)の範囲内で32ビットの乱数を1つ生成する。同じ結果は std::uniform_int_distribution
highest - 1
を使用しても同じ結果を得ることができます。このクラスは、32 ビットより大きな値を得るためにも使用できます。64 ビットの場合は、64 ビット bounded() オーバーロードも使用できます。
例えば、0から255(を含む)の間の値を得るには、次のように書く:
quint32 v = QRandomGenerator::global()->bounded(256);
当然ながら、generate()の結果を下位8ビットだけにマスクすることでも、同じ値を得ることができる。どちらの方法でも効率的である。
この関数は、quint32の全32ビット範囲の値を取得するために使用できないことに注意してください。代わりにgenerate() を使用する。
generate()、generate64()、generateDouble()も参照 。
quint64 QRandomGenerator::bounded(quint64 highest)
これはオーバーロードされた関数です。
0(排他的)からhighest (排他的)までの範囲内で、1 つのランダムな 64 ビット量を生成します。同じ結果は std::uniform_int_distribution<quint64>
highest - 1
を使用しても同じ結果が得られます。
この関数は、quint64
の全 64 ビット範囲の値を取得するために使用することはできないことに注意してください。 代わりに、generate64 ()を使用してください。
注: この関数はループとして実装されており、得られる乱数値に依存する。長い目で見れば、平均して2回弱ループするはずであるが、乱数発生器に欠陥がある場合、この関数の実行にかなり時間がかかる可能性がある。
generate(),generate64(),generateDouble()も参照の こと。
int QRandomGenerator::bounded(int lowest, int highest)
これはオーバーロードされた関数である。
lowest (包含)とhighest (排他的)の間の範囲にある1つのランダムな32ビット量を生成する。どちらも負であってもよいが、highest はlowest より大きくなければならない。
この関数は、intの32ビット全範囲の値を得るためには使用できないことに注意。代わりに、generate ()を使用し、intにキャストする。
generate()、generate64()、generateDouble()も参照 。
qint64 QRandomGenerator::bounded(qint64 lowest, qint64 highest)
これはオーバーロードされた関数です。
lowest (包含)とhighest (排他)の間の範囲に64ビットのランダムな数量を1つ生成します。どちらも負であってもかまいませんが、highest はlowest より大きくなければなりません。
この関数は、qint64
の完全な 64 ビット範囲の値を取得するために使用できないことに注意してください。代わりに、generate64 ()を使用し、qint64 にキャストしてください。
注: この関数はループとして実装されており、得られる乱数値に依存する。長い目で見れば、平均して2回弱ループするはずですが、乱数発生器に欠陥がある場合、この関数の実行にかなり時間がかかることがあります。
generate(),generate64(),generateDouble()も参照の こと。
quint32 QRandomGenerator::bounded(quint32 lowest, quint32 highest)
これはオーバーロードされた関数である。
lowest (排他的)からhighest (排他的)までの範囲で、1つのランダムな32ビット量を生成する。パラメータhighest はlowest より大きくなければならない。
同じ結果は std::uniform_int_distribution
をパラメータlowest と\a highest - 1
で使用しても同じ結果が得られます。このクラスは、32 ビットより大きな値を取得するためにも使用できます。
例えば、1000(含む)と2000(含まない)の間の値を得るには、次のように書きます:
quint32 v = QRandomGenerator::global()->bounded(1000, 2000);
この関数はquint32の全32ビット範囲の値を取得するために使用できないことに注意してください。代わりに、generate ()を使用する。
generate()、generate64()、generateDouble()も参照の こと。
quint64 QRandomGenerator::bounded(quint64 lowest, quint64 highest)
これはオーバーロードされた関数です。
lowest (包含)からhighest (排他的)までの範囲で、64 ビットのランダムな数量を 1 つ生成します。パラメータhighest はlowest より大きくなければならない。
同じ結果は std::uniform_int_distribution<quint64>
をパラメータlowest と\a highest - 1
で使用しても同じ結果を得ることができる。
この関数は、quint64
の全 64 ビット範囲の値を取得するために使用できないことに注意。代わりに、generate64 ()を使用する。
注意: この関数はループとして実装されており、得られる乱数値に依存する。長い目で見れば、平均して2回弱ループするはずであるが、乱数発生器に欠陥がある場合、この関数の実行にかなり時間がかかる可能性がある。
generate()、generate64()、generateDouble()も参照のこと 。
void QRandomGenerator::discard(unsigned long long z)
シーケンスから次のz エントリを破棄する。このメソッドは、generate()z を何度も呼び出して結果を破棄するのと同じである:
while (z--) generator.generate();
template <typename UInt, size_t N, QRandomGenerator::IfValidUInt<UInt> = true> void QRandomGenerator::fillRange(UInt (&)[N] buffer)
N
UInt
32 ビットまたは 64 ビット量(型による)を生成し、 配列に格納する。これは、乱数発生源の呼び出し回数を減らすことができるため、一度に複数の量を取得する最も効率的な方法です。buffer
例えば、2つの32ビット量を生成するには、次のように書くことができる:
quint32 array[2]; QRandomGenerator::global()->fillRange(array);
また、generate64 ()を1回呼び出して、64ビット値の2つの半分を分割することも可能である。
generate()も参照のこと 。
template <typename UInt, QRandomGenerator::IfValidUInt<UInt> = true> void QRandomGenerator::fillRange(UInt *buffer, qsizetype count)
count 32ビットまたは64ビットの量を生成し(UInt
の型による)、buffer が指すバッファに格納する。これは、乱数生成ソースの呼び出し回数を減らすことができるため、一度に複数の量を取得する最も効率的な方法です。
例えば、16個のエントリのリストを乱数値で埋めるには、次のように記述する:
QList<quint32> list; list.resize(16); QRandomGenerator::global()->fillRange(list.data(), list.size());
generate()も参照のこと 。
quint64 QRandomGenerator::generate64()
64ビットの乱数値を生成し、それを返します。
operator()() およびgenerate() も参照 。
quint32 QRandomGenerator::generate()
32 ビット乱数値を生成して返す。
operator()() およびgenerate64() も参照 。
template <typename ForwardIterator> void QRandomGenerator::generate(ForwardIterator begin, ForwardIterator end)
32 ビット量を生成し、begin からend までの範囲に格納する。この関数は以下と等価である(として実装されている):
std::generate(begin, end, [this]() { return generate(); });
この関数は、関数 std::seed_seq::generate
この関数は、符号なし32ビット整数値を必要とする関数[begin, end]の要件に準拠しています。
begin, end)の範囲が、要素ごとに32ビット以上のデータを格納できる領域を指している場合でも、要素は32ビットのデータのみで初期化されることに注意してください。それ以外のビットはゼロになります。範囲を64ビットで埋めるには、次のように書けばよい:
std::generate(begin, end, []() { return QRandomGenerator::global()->generate64(); });
範囲が連続したメモリ(配列やQList のデータなど)を指す場合、fillRange ()関数も使用できる。
fillRange()も参照のこと 。
double QRandomGenerator::generateDouble()
正規範囲[0, 1](つまり、0を含み1を含まない)のランダムなqrealを1つ生成します。
この関数は
QRandomGenerator64 rd; return std::generate_canonical<qreal, std::numeric_limits<qreal>::digits>(rd);
と等価です。 std::uniform_real_distribution
をパラメータ 0 と 1 で使用しても同じものが得られます。
generate()、generate64()、bounded()も参照 。
[static]
QRandomGenerator *QRandomGenerator::global()
securelySeeded() を使用してシードされた共有QRandomGenerator へのポインタを返す。この関数は、特定の用途のためにセキュアにシードされたQRandomGenerator を作成したり、かなり大きなQRandomGenerator オブジェクトを保存したりすることなく、ランダム・データを作成するために使用する必要があります。
例えば、以下の例では、ランダムなRGBカラーを作成している:
return QColor::fromRgb(QRandomGenerator::global()->generate());
このオブジェクトへのアクセスはスレッドセーフであるため、どのスレッドでもロックなしで使用できる。このオブジェクトはコピーすることもでき、コピーによって生成されるシーケンスは、共有オブジェクトが生成するシーケンスと同じになる。しかし、グローバルオブジェクトにアクセスする他のスレッドがある場合、それらのスレッドは予測できない間隔でサンプルを取得する可能性があることに注意してください。
注意:この関数はスレッドセーフである。
securelySeeded() およびsystem()も参照のこと 。
[static constexpr]
QRandomGenerator::result_type QRandomGenerator::max()
QRandomGenerator が生成する可能性のある最大値を返します。すなわち、std::numeric_limits<result_type>::max()
。
min() および QRandomGenerator64::max() も参照 。
[static constexpr]
QRandomGenerator::result_type QRandomGenerator::min()
QRandomGenerator が生成する可能性のある最小値を返す。つまり 0。
max() および QRandomGenerator64::min() も参照 。
[static]
QRandomGenerator QRandomGenerator::securelySeeded()
QRandomGenerator::system() で安全にシードされた新しいQRandomGenerator オブジェクトを返す。この関数は、QRandomGenerator が使用するアルゴリズムにとって理想的なシードサイズを得るので、しばらくの間保持される新しいQRandomGenerator オブジェクトを作成するための推奨方法である。
決定論的エンジンを安全にシードするために必要なデータ量を考えると、この関数はやや高価であり、QRandomGenerator の短期的な使用には使用すべきではありません(2600バイト未満のランダム・データを生成するためにこの関数を使用することは、事実上リソースの無駄遣いです)。それほど多くのデータを必要としない場合は、QRandomGenerator::global() を使用し、QRandomGenerator オブジェクトを格納しないことを検討してください。
void QRandomGenerator::seed(quint32 seed = 1)
値seed をシードとして使用して、このオブジェクトを播種します。
[noexcept]
void QRandomGenerator::seed(std::seed_seq &seed)
これはオーバーロードされた関数です。
シード配列seed をシードとしてこのオブジェクトを播種する。
[static]
QRandomGenerator *QRandomGenerator::system()
オペレーティングシステムが提供する機能を常に使用して乱数を生成する共有QRandomGenerator へのポインタを返します。このシステム機能は、少なくとも以下のオペレーティング・システムでは暗号的に安全であると考えられている:Apple OS (Darwin)、BSD、Linux、Windows。他のオペレーティング・システムでも同様かもしれない。
また、真のハードウェア乱数ジェネレーターに支えられている可能性もある。そのため、この関数が返すQRandomGenerator は、データの一括生成には使用しないでください。代わりに、QRandomGenerator または <random> ヘッダからランダムエンジンをシードするために使用してください。
この関数が返すオブジェクトはスレッドセーフであり、ロックのない任意のスレッドで使用することができる。また、このオブジェクトはコピーすることもでき、その結果生成されるQRandomGenerator もオペレーティングシステムの機能にアクセスするが、同じシーケンスは生成されない。
注:この関数はスレッドセーフである。
securelySeeded() およびglobal()も参照のこと 。
QRandomGenerator::result_type QRandomGenerator::operator()()
32ビット乱数を生成し、それを返す。
generate() およびgenerate64()も参照の こと。
関連する非会員
bool operator!=(const QRandomGenerator &rng1, const QRandomGenerator &rng2)
2 つのエンジンrng1 とrng2 が異なる状態にある場合、またはどちらかがオペレーティングシステム機能から読み込んでいて、もう一方がそうでない場合はtrue
を返し、そうでない場合はfalse
を返します。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。