std::random_device:: random_device
|
random_device
(
)
:
random_device
(
/*implementierungsdefiniert*/
)
{
}
|
(1) | (seit C++11) |
|
explicit
random_device
(
const
std::
string
&
token
)
;
|
(2) | (seit C++11) |
|
random_device
(
const
random_device
&
)
=
delete
;
|
(3) | (seit C++11) |
token
.
std::random_device
ist nicht kopierbar oder verschiebbar.
Inhaltsverzeichnis |
Exceptions
Wirft bei Fehler eine implementierungsdefinierte Ausnahme, die von std::exception abgeleitet ist.
Hinweise
Die Implementierung in
libstdc++
erwartet, dass
token
die Quelle der Zufallsbytes benennt. Mögliche Token-Werte umfassen
"default"
,
"hw"
,
"rand_s"
,
"rdseed"
,
"rdrand"
,
"rdrnd"
,
"/dev/urandom"
,
"/dev/random"
,
"mt19937"
, und einen ganzzahligen String, der den Seed der mt19937-Engine spezifiziert. (Token-Werte außer
"default"
sind nur für bestimmte Targets gültig.)
Die Implementierung in
libc++
erwartet, wenn sie für die Verwendung eines Character Devices als Quelle konfiguriert ist, dass
token
der Name eines Character Devices ist, das bei Lesevorgängen Zufallszahlen liefert; andernfalls erwartet sie, dass
token
"/dev/urandom"
ist.
Sowohl libstdc++ als auch libc++ werfen eine Ausnahme, wenn ein nicht unterstütztes Token bereitgestellt wird. Microsofts stdlib ignoriert das Token vollständig.
Beispiel
Demonstriert häufig verfügbare Typen von
std::random_device
unter 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() { // Hinweis: Die Verarbeitung des angegebenen Tokens ist implementierungsabhängig! // Standard-Token für random_device ist normalerweise /dev/urandom unter Linux demo(std::random_device {}); // Fordert /dev/random an, blockiert wenn Entropie leer ist // Funktioniert mit libstdc++, wird in msvc++ ignoriert, könnte in libc++ werfen (Stand Nov 2022) demo(std::random_device {"/dev/random"}); // Fordert nicht-blockierendes /dev/urandom an, stellt sicher dass RDRAND nicht verwendet wird // Funktioniert mit libstdc++ und libc++, wird in msvc++ ignoriert (Stand Nov 2022) demo(std::random_device {"/dev/urandom"}); // Fordert "hw" an, verwendet hardwarebasierte Zufallsgenerierung wie rdrand // Funktioniert mit libstdc++, wird in msvc++ ignoriert, wirft in libc++ (Stand Nov 2022) demo(std::random_device {"hw"}); }
Mögliche Ausgabe:
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
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| P0935R0 | C++11 | Standardkonstruktor war explicit | implizit gemacht |