QRandomGenerator Class
QRandomGenerator クラスを使用すると、高品質な乱数生成器から乱数を取得することができます。詳細...
| ヘッダー: | #include <QRandomGenerator> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| 継承元: |
注:このクラスのすべての関数は再入可能である。
注:以下の関数もスレッドセーフです:
パブリック型
パブリック関数
| QRandomGenerator(quint32 seedValue = 1) | |
| QRandomGenerator(const quint32 (&seedBuffer)[N]) | |
| QRandomGenerator(std::seed_seq &sseq) | |
| QRandomGenerator(const quint32 *begin, const quint32 *end) | |
| QRandomGenerator(const quint32 *seedBuffer, qsizetype len) | |
| QRandomGenerator(const QRandomGenerator &other) | |
| ~QRandomGenerator() | |
| 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 (&buffer)[N]) |
| 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 が動作するすべてのシステムにおいて暗号学的に安全です。この関数は、利用可能な場合はハードウェア機能を使用して乱数を生成します。 そのようなシステムにおいて、これらの機能は真の乱数生成器(RNG)となります。ただし、真のRNGである場合でも、それらの機能は有限のエントロピー源を持っているため、エントロピープールが枯渇すると結果を生成できなくなる可能性があります。
その場合は、まずオペレーティングシステムが、次に QRandomGenerator が、品質が徐々に低下する擬似乱数生成器(Qt のフォールバック生成器が最も単純なもの)に切り替わります。それらの生成器が依然として暗号学的な品質を備えているかどうかは、実装に依存します。 したがって、エントロピープールが枯渇することを防ぐため、QRandomGenerator::system() を高頻度の乱数生成には使用すべきではありません。経験則として、このクラスは 1 秒あたり 1 キロバイトを超える乱数データを生成するために呼び出してはなりません(注:これはシステムによって異なる場合があります)。
アプリケーションで真のRNGデータを大量に必要とする場合は、オペレーティングシステムの機能(Linux上の/dev/random など)を直接使用し、エントロピーが利用可能になるのを待つべきです。アプリケーションが、真のランダム性ではなく暗号学的な品質を備えたPRNGエンジンを必要とする場合は、QRandomGenerator::system() を引き続き使用できます(以下のセクションを参照)。
真のRNGも暗号学的に安全なPRNG(CSPRNG)も必要とされない場合、アプリケーションは代わりに、QRandomGeneratorの決定論的モードやC++標準ライブラリのPRNGエンジンを使用すべきです。QRandomGenerator::system()は、それらのシード設定に使用できます。
フォールバック品質
QRandomGenerator::system() は、オペレーティングシステムの機能を利用して乱数を生成します。この機能は、周囲の環境から実際のエントロピーを収集し、真の乱数を生成しようとします。ただし、エントロピープールが枯渇する可能性があります。その場合、オペレーティングシステムは一時的に擬似乱数エンジンに切り替わります。QRandomGenerator::system() は、さらなるエントロピーの収集を待つために、いかなる状況下でもブロックすることはありません。
以下のオペレーティングシステムでは、エントロピープールが枯渇した場合でも、乱数生成APIからの結果が少なくとも暗号学的に安全な品質であることを保証しています:Apple OS(Darwin)、BSD、Linux、Windows。 システムのインストール上の問題(現在のプロセスから/dev/urandom が読み取れないなど)がない限り、QRandomGenerator::system()も同様の保証が得られます。
その他のオペレーティングシステムでは、QRandomGeneratorは数値分布が良好なPRNGにフォールバックしますが、すべてのケースで適切なシードが保証されるわけではありません。詳細については、OSのドキュメントを参照してください。
QRandomGenerator が暗号品質を満たさない生成器にフォールバックしないことを必要とするアプリケーションについては、OS のドキュメントを確認するか、上記のいずれかの OS でのみ展開するように制限することをお勧めします。
Qt 6.12 以降、QRandomGenerator は、安全でない PRNG に初めてフォールバックした際に、stderr に警告を出力します。Qt のビルド時にオプション機能randomgenerator_disable_fallback を設定することで、この安全でないフォールバックを無効にし、代わりに、CSPRNG が利用できない状態で 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も参照してください 。
メンバ型のドキュメント
QRandomGenerator::result_type
operator() が返す型に対する typedef です。つまり、quint32 です。
operator()も参照してください 。
メンバ関数のドキュメント
QRandomGenerator::QRandomGenerator(quint32 seedValue = 1)
この QRandomGenerator オブジェクトを、シード値として `seedValue ` を指定して初期化します。同じシード値で生成または再シードされた 2 つのオブジェクトは、同じ数列を生成します。
seed() およびsecurelySeeded()も参照してください 。
template <qsizetype N> QRandomGenerator::QRandomGenerator(const quint32 (&seedBuffer)[N])
この QRandomGenerator オブジェクトを、配列 `seedBuffer ` に格納されている値をシードとして初期化します。同じシード値で生成または再シードされた 2 つのオブジェクトは、同じ数列を生成します。
これはオーバーロードされた関数です。
seed() およびsecurelySeeded()も参照してください 。
[noexcept] QRandomGenerator::QRandomGenerator(std::seed_seq &sseq)
この QRandomGenerator オブジェクトを、シードシーケンス `sseq ` をシードとして初期化します。同じシード値で生成または再シードされた 2 つのオブジェクトは、同じ数列を生成します。
これはオーバーロードされた関数です。
seed() およびsecurelySeeded()も参照してください 。
QRandomGenerator::QRandomGenerator(const quint32 *begin, const quint32 *end)
この QRandomGenerator オブジェクトを、begin からend の範囲にある値をシードとして初期化します。同じシード値で構築または再シードされた 2 つのオブジェクトは、同じ数列を生成します。
このコンストラクタは、以下と同等です:
std::seed_seq sseq(begin, end);
QRandomGenerator generator(sseq);これはオーバーロードされた関数です。
seed() およびsecurelySeeded()も参照してください 。
QRandomGenerator::QRandomGenerator(const quint32 *seedBuffer, qsizetype len)
この QRandomGenerator オブジェクトを、配列 `seedBuffer ` に格納されている `len ` 値をシードとして初期化します。同じシード値で構築または再シードされた 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() のコピーを作成することは推奨されません。排他的な決定論的ジェネレータが必要な場合は、代わりにsecurelySeeded() を使用して、QRandomGenerator::global() とは一切関係のない新しいオブジェクトを取得することを検討してください。
[constexpr noexcept default] QRandomGenerator::~QRandomGenerator()
QRandomGenerator のインスタンスを破棄します。
double QRandomGenerator::bounded(double highest)
0(0を含む)からhighest ( を含まない)の範囲のdouble型ランダム数値を1つ生成します。この関数は以下の関数と同等であり、次のように実装されています:
return generateDouble() * highest;highest パラメータが負の場合、結果も負になります。無限大または NaN の場合、結果も無限大または NaN になります(つまり、ランダムではありません)。
generateDouble() およびbounded(quint64)も参照してください 。
int QRandomGenerator::bounded(int highest)
0(含む)からhighest (除く)の範囲内の32ビットの乱数を1つ生成します。highest は正の値でなければなりません。
なお、この関数では int の 32 ビット全範囲の値を取得することはできません。その場合は、generate() を使用し、int にキャストしてください。
これはオーバーロードされた関数です。
generate()、generate64()、およびgenerateDouble()も参照してください 。
qint64 QRandomGenerator::bounded(qint64 highest)
0(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 パラメータに 0 と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 (除く)の範囲内の64ビットの乱数を1つ生成します。以下の方法でも同じ結果が得られます。 std::uniform_int_distribution<quint64> パラメータに 0 とhighest - 1 を指定して呼び出すことでも、同じ結果が得られます。
なお、この関数ではquint64 の64ビット全範囲の値を取得することはできません。その場合は、generate64()を使用してください。
注:この関数は 、取得された乱数値に依存するループとして実装されています。長期的には平均して2回弱ループするはずですが、乱数生成器に不具合がある場合、この関数の実行にかなり長い時間がかかる可能性があります。
これはオーバーロードされた関数です。
generate()、generate64()、およびgenerateDouble()も参照してください 。
int QRandomGenerator::bounded(int lowest, int highest)
lowest (両端を含む)からhighest ( を除く)の範囲内の32ビットの乱数を1つ生成します。 と はいずれも負の値をとることができますが、highest はlowest より大きくなければなりません。
なお、この関数では int の 32 ビットの全範囲にわたる値を取得することはできません。その場合は、generate() を使用し、int にキャストしてください。
これはオーバーロードされた関数です。
generate()、generate64()、およびgenerateDouble()も参照してください 。
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)
この関数は、パラメータの型が完全に一致しない場合のオーバーロードの解決を支援するために存在します。この関数では、小さい方の型を大きい方の型に昇格させ、適切なオーバーロードを呼び出します。
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 ( を除く)までの範囲で、32ビットの乱数を1つ生成します。highest パラメータは、lowest より大きくなければなりません。
同じ結果は、 std::uniform_int_distributionlowest および\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 (&buffer)[N])
N の32ビットまたは64ビットの数値(UInt の型に応じて)を生成し、それらを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) の範囲が、要素あたり 32 ビット以上を格納できる領域を指している場合でも、要素は 32 ビット分のデータのみで初期化されます。それ以外のビットはすべて 0 になります。この範囲を 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()も参照してください 。
[static constexpr] QRandomGenerator::result_type QRandomGenerator::min()
QRandomGenerator が生成しうる最小値を返します。つまり、0 です。
max()も参照してください 。
[static] QRandomGenerator QRandomGenerator::securelySeeded()
QRandomGenerator::system() を使用して安全にシードされた新しいQRandomGenerator オブジェクトを返します。この関数は、QRandomGenerator が使用するアルゴリズムに最適なシードサイズを取得するため、長期間保持する新しいQRandomGenerator オブジェクトを作成する際の推奨される方法です。
決定論的エンジンを安全にシードするために必要なデータ量を考慮すると、この関数の実行コストは比較的高いため、QRandomGenerator を短期間のみ使用する場合には使用すべきではありません(2600バイト未満のランダムデータを生成するために使用することは、実質的にリソースの浪費となります)。 それほど多くのデータを必要としない用途の場合は、代わりに `QRandomGenerator::global()` を使用し、`QRandomGenerator ` オブジェクトを保存しないことを検討してください。
global() およびsystem()も参照してください 。
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)
rng1 とrng2 の 2 つのエンジンが異なる状態にある場合、あるいは一方のエンジンがオペレーティングシステムの機能から読み込みを行っているのに対し、もう一方が行っていない場合、true を返します。それ以外の場合はfalse を返します。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.