std::random_device:: random_device
|
random_device
(
)
:
random_device
(
/*implementation-defined*/
)
{
}
|
(1) | (depuis C++11) |
|
explicit
random_device
(
const
std::
string
&
token
)
;
|
(2) | (depuis C++11) |
|
random_device
(
const
random_device
&
)
=
delete
;
|
(3) | (depuis C++11) |
token
défini par l'implémentation.
std::random_device
n'est ni copiable ni déplaçable.
Table des matières |
Exceptions
Lance une exception définie par l'implémentation dérivée de std::exception en cas d'échec.
Notes
L'implémentation dans
libstdc++
s'attend à ce que
token
désigne la source d'octets aléatoires. Les valeurs possibles pour token incluent
"default"
,
"hw"
,
"rand_s"
,
"rdseed"
,
"rdrand"
,
"rdrnd"
,
"/dev/urandom"
,
"/dev/random"
,
"mt19937"
, et une chaîne entière spécifiant la graine du moteur mt19937. (Les valeurs de token autres que
"default"
ne sont valides que pour certaines cibles.)
L'implémentation dans
libc++
, lorsqu'elle est configurée pour utiliser un périphérique de caractères comme source, attend que
token
soit le nom d'un périphérique de caractères produisant des nombres aléatoires lorsqu'il est lu ; sinon, elle attend que
token
soit
"/dev/urandom"
.
Tant libstdc++ que libc++ lèvent une exception si un jeton non pris en charge est fourni. La bibliothèque standard de Microsoft ignore complètement le jeton.
Exemple
Démontre les types couramment disponibles de
std::random_device
sur Linux.
#include <iostream> #include <random> void demo(std::random_device&& rd) { static std::uniform_int_distribution<int> d(0, 9); for (int n = 0; n != 10; ++n) std::cout << d(rd) << ' '; std::cout << '\n'; } int main() { // Note: How the supplied token is handled is implementation-defined! // Default token for random_device is usually /dev/urandom on Linux demo(std::random_device {}); // Request /dev/random, blocks when entropy is empty // Works on libstdc++, ignored in msvc++, might throw on libc++ (as of Nov 2022) demo(std::random_device {"/dev/random"}); // Request non-blocking /dev/urandom, ensures that RDRAND is not used // Works on libstdc++ and libc++, ignored in msvc++ (as of Nov 2022) demo(std::random_device {"/dev/urandom"}); // Request "hw", will use hardware-based random generation like rdrand // Works on libstdc++, ignored in msvc++, throws on libc++ (as of Nov 2022) demo(std::random_device {"hw"}); }
Sortie possible :
9 5 2 7 5 9 4 1 0 7 4 7 6 5 1 5 5 1 8 6 3 3 6 1 4 1 4 1 0 2 4 6 3 9 1 9 4 0 9 3
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| P0935R0 | C++11 | default constructor was explicit | made implicit |