QRandomGenerator Class
La classe QRandomGenerator permet d'obtenir des valeurs aléatoires à partir d'un générateur de nombres aléatoires de haute qualité. Plus d'informations...
| En-tête : | #include <QRandomGenerator> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake : | QT += core |
| Inherited By : |
Remarque : Toutes les fonctions de cette classe sont réentrantes.
Remarque : Ces fonctions sont également sûres pour les threads:
Types publics
Fonctions publiques
| 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()() |
Membres publics statiques
| QRandomGenerator * | global() |
| QRandomGenerator::result_type | max() |
| QRandomGenerator::result_type | min() |
| QRandomGenerator | securelySeeded() |
| QRandomGenerator * | system() |
Non-membres apparentés
| bool | operator!=(const QRandomGenerator &rng1, const QRandomGenerator &rng2) |
Description détaillée
QRandomGenerator peut être utilisé pour générer des valeurs aléatoires à partir d'un générateur de nombres aléatoires de haute qualité. Comme les moteurs aléatoires C++, QRandomGenerator peut être alimenté par des valeurs fournies par l'utilisateur via le constructeur. Lorsqu'elle est alimentée, la séquence de nombres générée par cette classe est déterministe. En d'autres termes, avec les mêmes données de départ, QRandomGenerator générera la même séquence de nombres. Mais avec des graines différentes, les résultats devraient être considérablement différents.
QRandomGenerator::securelySeeded() peut être utilisé pour créer un QRandomGenerator qui est ensemencé de manière sécurisée avec QRandomGenerator::system(), ce qui signifie que la séquence de nombres qu'il génère ne peut pas être facilement prédite. De plus, QRandomGenerator::global() renvoie une instance globale de QRandomGenerator dont Qt s'assurera qu'elle a été ensemencée de manière sécurisée. Cet objet est sûr pour les threads, peut être partagé pour la plupart des utilisations et est toujours alimenté à partir de QRandomGenerator::system()
QRandomGenerator::system() peut être utilisé pour accéder au générateur aléatoire cryptographiquement sûr du système. Sur les systèmes Unix, cela équivaut à lire dans /dev/urandom ou dans les appels système getrandom() ou getentropy().
La classe peut générer des quantités de 32 ou 64 bits, ou remplir un tableau de ces quantités. La façon la plus courante de générer de nouvelles valeurs est d'appeler les fonctions generate(), generate64() ou fillRange(). On peut l'utiliser comme :
quint32 value = QRandomGenerator::global()->generate();
En outre, il fournit une fonction en virgule flottante generateDouble() qui renvoie un nombre dans l'intervalle [0, 1] (c'est-à-dire zéro inclus et 1 exclu). Il existe également un ensemble de fonctions de commodité qui facilitent l'obtention d'un nombre aléatoire dans un intervalle intégral délimité.
Ensemencement et déterminisme
QRandomGenerator peut être ensemencé avec des données spécifiques. Dans ce cas, les nombres générés par l'objet seront toujours les mêmes, comme dans l'exemple suivant :
QRandomGenerator prng1(1234), prng2(1234); Q_ASSERT(prng1.generate() == prng2.generate()); Q_ASSERT(prng1.generate64() == prng2.generate64());
Les données d'amorçage se présentent sous la forme d'un ou plusieurs mots de 32 bits. La taille idéale de la graine est approximativement égale à la taille de la classe QRandomGenerator elle-même. En raison du mélange des données de la graine, QRandomGenerator ne peut pas garantir que des graines distinctes produiront des séquences différentes.
QRandomGenerator::global(), comme tous les générateurs créés par QRandomGenerator::securelySeeded(), est toujours ensemencé à partir de QRandomGenerator::system(), il n'est donc pas possible de lui faire produire des séquences identiques.
Données en vrac
Lorsqu'il fonctionne en mode déterministe, QRandomGenerator peut être utilisé pour générer des données en masse. En fait, les applications qui n'ont pas besoin de données aléatoires cryptographiquement sûres ou réelles sont conseillées d'utiliser un QRandomGenerator normal au lieu de QRandomGenerator::system() pour leurs besoins en données aléatoires.
Pour faciliter l'utilisation, QRandomGenerator fournit un objet global qui peut être facilement utilisé, comme dans l'exemple suivant :
int x = QRandomGenerator::global()->generate(); int y = QRandomGenerator::global()->generate(); int w = QRandomGenerator::global()->bounded(16384); int h = QRandomGenerator::global()->bounded(16384);
Générateur de nombres aléatoires à l'échelle du système
QRandomGenerator::system() peut être utilisée pour accéder au générateur de nombres aléatoires du système, qui est cryptographiquement sûr sur tous les systèmes sur lesquels Qt fonctionne. Cette fonction utilisera les facilités matérielles pour générer des nombres aléatoires lorsqu'elles sont disponibles. Sur ces systèmes, ces équipements sont de véritables générateurs de nombres aléatoires. Cependant, s'il s'agit de véritables RNG, ces équipements ont des sources d'entropie finies et peuvent donc ne pas produire de résultats si leur réserve d'entropie est épuisée.
Dans ce cas, le système d'exploitation puis QRandomGenerator se rabattent sur des générateurs de nombres pseudo-aléatoires de qualité décroissante (le générateur de secours de Qt étant le plus simple). La question de savoir si ces générateurs sont toujours de qualité cryptographique est définie par l'implémentation. Par conséquent, QRandomGenerator::system() ne doit pas être utilisé pour la génération de nombres aléatoires à haute fréquence, de peur que la réserve d'entropie ne devienne vide. En règle générale, cette classe ne doit pas être utilisée pour générer plus d'un kilooctet par seconde de données aléatoires (remarque : cela peut varier d'un système à l'autre).
Si une application a besoin de vraies données RNG en masse, elle doit utiliser directement les installations du système d'exploitation (telles que /dev/random sous Linux) et attendre que l'entropie devienne disponible. Si l'application a besoin de moteurs PRNG de qualité cryptographique, mais pas d'un véritable caractère aléatoire, QRandomGenerator::system() peut toujours être utilisé (voir la section ci-dessous).
Si ni un vrai RNG ni un PRNG cryptographiquement sûr ne sont requis, les applications devraient plutôt utiliser des moteurs PRNG comme le mode déterministe de QRandomGenerator et ceux de la bibliothèque standard C++. QRandomGenerator::system() peut être utilisé pour les ensemencer.
Qualité de repli
QRandomGenerator::system() utilise les installations du système d'exploitation pour obtenir des nombres aléatoires, qui tentent de collecter l'entropie réelle de l'environnement pour produire de vrais nombres aléatoires. Toutefois, il est possible que la réserve d'entropie s'épuise, auquel cas le système d'exploitation se rabattra sur un moteur pseudo-aléatoire pendant un certain temps. En aucun cas QRandomGenerator::system() ne se bloquera, attendant que plus d'entropie soit collectée.
Les systèmes d'exploitation suivants garantissent que les résultats de leur API de génération aléatoire seront au moins d'une qualité cryptographiquement sûre, même si la réserve d'entropie est épuisée : Apple OS (Darwin), BSD, Linux, Windows. A moins d'un problème d'installation du système (tel que /dev/urandom qui n'est pas lisible par le processus en cours), QRandomGenerator::system() aura donc les mêmes garanties.
Sur d'autres systèmes d'exploitation, QRandomGenerator se rabattra sur un PRNG de bonne distribution numérique, mais il ne peut pas garantir un ensemencement correct dans tous les cas. Veuillez consulter la documentation du système d'exploitation pour plus d'informations.
Les applications qui exigent que QRandomGenerator ne se rabatte pas sur des générateurs de qualité non cryptographique sont invitées à consulter la documentation de leur système d'exploitation ou à limiter leur déploiement à l'un des systèmes ci-dessus.
Réentralité et sécurité des threads
QRandomGenerator est réentrant, ce qui signifie que plusieurs threads peuvent opérer sur cette classe en même temps, tant qu'ils opèrent sur des objets différents. Si plusieurs threads doivent partager une séquence PRNG, un verrouillage externe par un mutex est nécessaire.
Les objets renvoyés par QRandomGenerator::global() et QRandomGenerator::system() constituent des exceptions : ces objets sont sûrs pour les threads et peuvent être utilisés par n'importe quel thread sans verrouillage externe. Notez que la sécurité thread ne s'étend pas à la copie de ces objets : ils doivent toujours être utilisés par référence.
Compatibilité avec la bibliothèque standard C++
QRandomGenerator est modelé sur les exigences des moteurs de nombres aléatoires de la bibliothèque standard C++ et peut être utilisé dans presque tous les contextes où les moteurs de la bibliothèque standard peuvent l'être. Les exceptions aux exigences sont les suivantes :
- QRandomGenerator ne prend pas en charge l'ensemencement à partir d'une autre classe de type séquence de graines que std::seed_seq elle-même ;
- QRandomGenerator n'est pas comparable (mais peut être copié) ou transmissible à
std::ostreamou à partir destd::istream.
QRandomGenerator est également compatible avec les classes de distribution uniforme std::uniform_int_distribution et std:uniform_real_distribution, ainsi qu'avec la fonction libre std::generate_canonical. Par exemple, le code suivant peut être utilisé pour générer un nombre à virgule flottante dans l'intervalle [1, 2,5] :
std::uniform_real_distribution<> dist(1, 2.5); return dist(*QRandomGenerator::global());
Voir également QRandomGenerator64.
Documentation sur les types de membres
QRandomGenerator::result_type
Un typedef du type que operator() renvoie. C'est-à-dire quint32.
Voir aussi operator().
Documentation sur les fonctions membres
QRandomGenerator::QRandomGenerator(quint32 seedValue = 1)
Initialise cet objet QRandomGenerator avec la valeur seedValue en tant que graine. Deux objets construits ou réensemencés avec la même valeur de semence produiront la même séquence de nombres.
Voir aussi seed() et securelySeeded().
template <qsizetype N> QRandomGenerator::QRandomGenerator(const quint32 (&)[N] seedBuffer)
Initialise cet objet QRandomGenerator avec les valeurs trouvées dans le tableau seedBuffer en tant que graine. Deux objets construits ou réensemencés avec la même valeur de semence produiront la même séquence de nombres.
Il s'agit d'une fonction surchargée.
Voir aussi seed() et securelySeeded().
[noexcept] QRandomGenerator::QRandomGenerator(std::seed_seq &sseq)
Initialise cet objet QRandomGenerator avec la séquence de semences sseq comme semence. Deux objets construits ou réensemencés avec la même valeur de semence produiront la même séquence de nombres.
Il s'agit d'une fonction surchargée.
Voir aussi seed() et securelySeeded().
QRandomGenerator::QRandomGenerator(const quint32 *begin, const quint32 *end)
Initialise cet objet QRandomGenerator avec les valeurs trouvées dans l'intervalle de begin à end en tant que graine. Deux objets construits ou réensemencés avec la même valeur de semence produiront la même séquence de nombres.
Ce constructeur est équivalent à :
std::seed_seq sseq(begin, end); QRandomGenerator generator(sseq);
Il s'agit d'une fonction surchargée.
Voir aussi seed() et securelySeeded().
QRandomGenerator::QRandomGenerator(const quint32 *seedBuffer, qsizetype len)
Initialise cet objet QRandomGenerator avec les valeurs len trouvées dans le tableau seedBuffer en tant que graine. Deux objets construits ou réensemencés avec la même valeur de semence produiront la même séquence de nombres.
Ce constructeur est équivalent à :
std::seed_seq sseq(seedBuffer, seedBuffer + len); QRandomGenerator generator(sseq);
Il s'agit d'une fonction surchargée.
Voir aussi seed() et securelySeeded().
QRandomGenerator::QRandomGenerator(const QRandomGenerator &other)
Crée une copie de l'état du générateur dans l'objet other. Si other est QRandomGenerator::system() ou une copie de celui-ci, cet objet lira également les installations de génération aléatoire du système d'exploitation. Dans ce cas, les séquences générées par les deux objets seront différentes.
Dans tous les autres cas, le nouvel objet QRandomGenerator commencera à la même position que l'objet other dans la séquence déterministe. Les deux objets généreront la même séquence à partir de ce point.
C'est pourquoi il n'est pas conseillé de créer une copie de QRandomGenerator::global(). Si vous avez besoin d'un générateur déterministe exclusif, envisagez plutôt d'utiliser securelySeeded() pour obtenir un nouvel objet qui ne partage aucune relation avec QRandomGenerator::global().
double QRandomGenerator::bounded(double highest)
Génère un double aléatoire entre 0 (inclus) et highest (exclusif). Cette fonction est équivalente à et est implémentée comme :
return generateDouble() * highest;
Si le paramètre highest est négatif, le résultat sera également négatif ; s'il est infini ou NaN, le résultat sera également infini ou NaN (c'est-à-dire non aléatoire).
Voir aussi generateDouble() et bounded(quint64).
int QRandomGenerator::bounded(int highest)
Génère une quantité aléatoire de 32 bits comprise entre 0 (inclus) et highest (exclusif). highest doit être positif.
Notez que cette fonction ne peut pas être utilisée pour obtenir des valeurs dans la plage complète de 32 bits de int. Il convient plutôt d'utiliser generate() et de le convertir en int.
Il s'agit d'une fonction surchargée.
Voir aussi generate(), generate64() et generateDouble().
qint64 QRandomGenerator::bounded(qint64 highest)
Génère une quantité aléatoire de 64 bits comprise entre 0 (inclus) et highest (exclusif). highest doit être positif.
Notez que cette fonction ne peut pas être utilisée pour obtenir des valeurs dans l'ensemble de la plage de 64 bits de qint64. Il convient plutôt d'utiliser generate64() et de le convertir en qint64 ou d'utiliser la version non signée de cette fonction.
Remarque : cette fonction est implémentée comme une boucle, qui dépend de la valeur aléatoire obtenue. À long terme, elle devrait être exécutée en moyenne un peu moins de deux fois, mais si le générateur aléatoire est défectueux, l'exécution de cette fonction peut prendre beaucoup plus de temps.
Il s'agit d'une fonction surchargée.
Voir aussi generate(), generate64() et generateDouble().
quint32 QRandomGenerator::bounded(quint32 highest)
Génère une quantité aléatoire de 32 bits comprise entre 0 (inclus) et highest (exclusif). Le même résultat peut être obtenu en utilisant std::uniform_int_distribution avec les paramètres 0 et highest - 1. Cette classe peut également être utilisée pour obtenir des quantités supérieures à 32 bits ; pour 64 bits, la surcharge bounded() 64 bits peut également être utilisée.
Par exemple, pour obtenir une valeur comprise entre 0 et 255 (inclus), on écrira :
quint32 v = QRandomGenerator::global()->bounded(256);
Naturellement, on peut aussi obtenir la même chose en masquant le résultat de generate() sur les seuls 8 bits inférieurs. Les deux solutions sont aussi efficaces l'une que l'autre.
Notez que cette fonction ne peut pas être utilisée pour obtenir des valeurs dans la plage complète de 32 bits de quint32. Utilisez plutôt generate().
Il s'agit d'une fonction surchargée.
Voir aussi generate(), generate64() et generateDouble().
quint64 QRandomGenerator::bounded(quint64 highest)
Génère une quantité aléatoire de 64 bits comprise entre 0 (inclus) et highest (exclusif). Le même résultat peut être obtenu en utilisant std::uniform_int_distribution<quint64> avec les paramètres 0 et highest - 1.
Notez que cette fonction ne peut pas être utilisée pour obtenir des valeurs dans la plage complète de 64 bits de quint64. Utilisez plutôt generate64().
Note : Cette fonction est implémentée comme une boucle, qui dépend de la valeur aléatoire obtenue. À long terme, elle devrait être exécutée en moyenne un peu moins de deux fois, mais si le générateur aléatoire est défectueux, l'exécution de cette fonction peut prendre beaucoup plus de temps.
Il s'agit d'une fonction surchargée.
Voir aussi generate(), generate64() et generateDouble().
int QRandomGenerator::bounded(int lowest, int highest)
Génère une quantité aléatoire de 32 bits comprise entre lowest (inclus) et highest (exclus), les deux pouvant être négatifs, mais highest devant être supérieur à lowest.
Notez que cette fonction ne peut pas être utilisée pour obtenir des valeurs dans l'ensemble de la plage 32 bits de int. Il convient plutôt d'utiliser generate() et de le convertir en int.
Il s'agit d'une fonction surchargée.
Voir aussi generate(), generate64() et generateDouble().
qint64 QRandomGenerator::bounded(int lowest, qint64 highest)
qint64 QRandomGenerator::bounded(qint64 lowest, int highest)
quint64 QRandomGenerator::bounded(unsigned int lowest, quint64 highest)
quint64 QRandomGenerator::bounded(quint64 lowest, unsigned int highest)
Cette fonction existe pour aider à la résolution des surcharges lorsque les types des paramètres ne correspondent pas exactement. Cette fonction va promouvoir le plus petit type vers le type du plus grand et appeler la surcharge correcte.
qint64 QRandomGenerator::bounded(qint64 lowest, qint64 highest)
Génère une quantité aléatoire de 64 bits comprise entre lowest (inclus) et highest (exclus), les deux pouvant être négatifs, mais highest devant être supérieur à lowest.
Notez que cette fonction ne peut pas être utilisée pour obtenir des valeurs dans la plage complète de 64 bits de qint64. Il faut plutôt utiliser generate64() et le convertir en qint64.
Remarque : cette fonction est implémentée comme une boucle, qui dépend de la valeur aléatoire obtenue. À long terme, elle devrait être exécutée en moyenne un peu moins de deux fois, mais si le générateur aléatoire est défectueux, l'exécution de cette fonction peut prendre beaucoup plus de temps.
Il s'agit d'une fonction surchargée.
Voir aussi generate(), generate64() et generateDouble().
quint32 QRandomGenerator::bounded(quint32 lowest, quint32 highest)
Génère une quantité aléatoire de 32 bits comprise entre lowest (inclus) et highest (exclus). Le paramètre highest doit être supérieur à lowest.
Le même résultat peut être obtenu en utilisant std::uniform_int_distribution avec les paramètres lowest et \a highest - 1. Cette classe peut également être utilisée pour obtenir des quantités supérieures à 32 bits.
Par exemple, pour obtenir une valeur comprise entre 1000 (incl.) et 2000 (excl.), on écrira :
quint32 v = QRandomGenerator::global()->bounded(1000, 2000);
Notez que cette fonction ne peut pas être utilisée pour obtenir des valeurs dans la plage complète de 32 bits de quint32. Utilisez plutôt generate().
Il s'agit d'une fonction surchargée.
Voir aussi generate(), generate64() et generateDouble().
quint64 QRandomGenerator::bounded(quint64 lowest, quint64 highest)
Génère une quantité aléatoire de 64 bits comprise entre lowest (inclus) et highest (exclus). Le paramètre highest doit être supérieur à lowest.
Le même résultat peut être obtenu en utilisant std::uniform_int_distribution<quint64> avec les paramètres lowest et \a highest - 1.
Notez que cette fonction ne peut pas être utilisée pour obtenir des valeurs dans la plage complète de 64 bits de quint64. Utilisez plutôt generate64().
Note : Cette fonction est implémentée comme une boucle, qui dépend de la valeur aléatoire obtenue. À long terme, elle devrait être exécutée en moyenne un peu moins de deux fois, mais si le générateur aléatoire est défectueux, l'exécution de cette fonction peut prendre beaucoup plus de temps.
Il s'agit d'une fonction surchargée.
Voir aussi generate(), generate64() et generateDouble().
void QRandomGenerator::discard(unsigned long long z)
Rejette les entrées z suivantes de la séquence. Cette méthode équivaut à appeler generate() z fois et à rejeter le résultat, comme dans l'exemple suivant :
while (z--) generator.generate();
template < typename UInt, size_t N, QRandomGenerator::IfValidUInt<UInt> = true > void QRandomGenerator::fillRange(UInt (&)[N] buffer)
Génère N des quantités de 32 ou 64 bits (selon le type UInt) et les stocke dans le tableau buffer. C'est le moyen le plus efficace d'obtenir plus d'une quantité à la fois, car il réduit le nombre d'appels à la source du générateur de nombres aléatoires.
Par exemple, pour remplir deux quantités de 32 bits, on peut écrire :
quint32 array[2]; QRandomGenerator::global()->fillRange(array);
Il aurait également été possible de faire un appel à generate64(), puis de diviser les deux moitiés de la valeur de 64 bits.
Voir également generate().
template <typename UInt, QRandomGenerator::IfValidUInt<UInt> = true> void QRandomGenerator::fillRange(UInt *buffer, qsizetype count)
Génère count des quantités de 32 ou 64 bits (selon le type UInt) et les stocke dans le tampon pointé par buffer. C'est la manière la plus efficace d'obtenir plus d'une quantité à la fois, car elle réduit le nombre d'appels à la source du générateur de nombres aléatoires.
Par exemple, pour remplir une liste de 16 entrées avec des valeurs aléatoires, on peut écrire :
QList<quint32> list; list.resize(16); QRandomGenerator::global()->fillRange(list.data(), list.size());
Voir aussi generate().
quint64 QRandomGenerator::generate64()
Génère une quantité aléatoire de 64 bits et la renvoie.
Voir aussi operator()() et generate().
quint32 QRandomGenerator::generate()
Génère une quantité aléatoire de 32 bits et la renvoie.
Voir aussi operator()() et generate64().
template <typename ForwardIterator> void QRandomGenerator::generate(ForwardIterator begin, ForwardIterator end)
Génère des quantités de 32 bits et les stocke dans la plage comprise entre begin et end. Cette fonction est équivalente à (et est implémentée comme) :
std::generate(begin, end, [this]() { return generate(); });
Cette fonction est conforme aux exigences de la fonction std::seed_seq::generatequi nécessite des valeurs entières non signées de 32 bits.
Notez que si la plage [begin, end) fait référence à une zone qui peut stocker plus de 32 bits par élément, les éléments seront toujours initialisés avec seulement 32 bits de données. Tous les autres bits seront à zéro. Pour remplir la plage avec des quantités de 64 bits, on peut écrire :
std::generate(begin, end, []() { return QRandomGenerator::global()->generate64(); });
Si la plage fait référence à une mémoire contiguë (telle qu'un tableau ou les données d'un site QList), la fonction fillRange() peut également être utilisée.
Voir également fillRange().
double QRandomGenerator::generateDouble()
Génère un qreal aléatoire dans l'intervalle canonique [0, 1] (c'est-à-dire incluant zéro et excluant 1).
Cette fonction est équivalente à :
QRandomGenerator64 rd;
return std::generate_canonical<qreal, std::numeric_limits<qreal>::digits>(rd);La même chose peut être obtenue en utilisant std::uniform_real_distribution avec les paramètres 0 et 1.
Voir aussi generate(), generate64() et bounded().
[static] QRandomGenerator *QRandomGenerator::global()
Renvoie un pointeur vers un objet partagé QRandomGenerator qui a été ensemencé à l'aide de securelySeeded(). Cette fonction devrait être utilisée pour créer des données aléatoires sans avoir à créer un QRandomGenerator sécurisé pour un usage spécifique ou à stocker un objet QRandomGenerator assez volumineux.
Par exemple, l'exemple suivant crée une couleur RVB aléatoire :
return QColor::fromRgb(QRandomGenerator::global()->generate());
Les accès à cet objet sont sûrs pour les threads et il peut donc être utilisé dans n'importe quel thread sans verrou. L'objet peut également être copié et la séquence produite par la copie sera la même que celle produite par l'objet partagé. Notez cependant que si d'autres threads accèdent à l'objet global, ils peuvent obtenir des échantillons à des intervalles imprévisibles.
Remarque : cette fonction est à l'épreuve des threads.
Voir également securelySeeded() et system().
[static constexpr] QRandomGenerator::result_type QRandomGenerator::max()
Renvoie la valeur maximale que QRandomGenerator peut générer. C'est-à-dire std::numeric_limits<result_type>::max().
Voir aussi min().
[static constexpr] QRandomGenerator::result_type QRandomGenerator::min()
Renvoie la valeur minimale que QRandomGenerator peut générer. C'est-à-dire 0.
Voir aussi max().
[static] QRandomGenerator QRandomGenerator::securelySeeded()
Renvoie un nouvel objet QRandomGenerator qui a été ensemencé de manière sécurisée avec QRandomGenerator::system(). Cette fonction permet d'obtenir la taille de semence idéale pour l'algorithme utilisé par QRandomGenerator et constitue donc la méthode recommandée pour créer un nouvel objet QRandomGenerator qui sera conservé pendant un certain temps.
Étant donné la quantité de données nécessaires pour ensemencer en toute sécurité le moteur déterministe, cette fonction est quelque peu coûteuse et ne devrait pas être utilisée pour des utilisations à court terme de QRandomGenerator (l'utiliser pour générer moins de 2600 octets de données aléatoires est en fait un gaspillage de ressources). Si l'utilisation ne nécessite pas autant de données, envisagez d'utiliser QRandomGenerator::global() et de ne pas stocker un objet QRandomGenerator à la place.
Voir aussi global() et system().
void QRandomGenerator::seed(quint32 seed = 1)
Réensemence cet objet en utilisant la valeur seed comme semence.
[noexcept] void QRandomGenerator::seed(std::seed_seq &seed)
Réensemence cet objet en utilisant la séquence de semences seed comme semence.
Il s'agit d'une fonction surchargée.
[static] QRandomGenerator *QRandomGenerator::system()
Renvoie un pointeur vers un site partagé QRandomGenerator qui utilise toujours les facilités fournies par le système d'exploitation pour générer des nombres aléatoires. Les facilités du système sont considérées comme étant cryptographiquement sûres sur au moins les systèmes d'exploitation suivants : Apple OSes (Darwin), BSDs, Linux, Windows : Apple OS (Darwin), BSD, Linux, Windows. Cela peut également être le cas pour d'autres systèmes d'exploitation.
Il est également possible qu'ils soient soutenus par un véritable générateur de nombres aléatoires matériel. C'est pourquoi le site QRandomGenerator renvoyé par cette fonction ne doit pas être utilisé pour la génération de données en masse. Utilisez-le plutôt pour amorcer QRandomGenerator ou un moteur aléatoire à partir de l'en-tête <random>.
L'objet retourné par cette fonction est à l'abri des threads et peut être utilisé dans n'importe quel thread sans verrou. Il peut également être copié et les QRandomGenerator qui en résultent auront également accès aux installations du système d'exploitation, mais ils ne généreront pas la même séquence.
Remarque : cette fonction est à l'épreuve des threads.
Voir aussi securelySeeded() et global().
QRandomGenerator::result_type QRandomGenerator::operator()()
Génère une quantité aléatoire de 32 bits et la renvoie.
Voir également generate() et generate64().
Non-membres apparentés
bool operator!=(const QRandomGenerator &rng1, const QRandomGenerator &rng2)
Renvoie true si les deux moteurs rng1 et rng2 sont dans des états différents ou si l'un d'entre eux lit dans les installations du système d'exploitation et l'autre non, false sinon.
© 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.