std::random_device::random_device
random_device() : random_device(/*implementation-defined*/) {} |
(1) | (since C++11) |
explicit random_device(const std::string& token); |
(2) | (since C++11) |
random_device(const random_device& ) = delete; |
(3) | (since C++11) |
std::random_device
object, making use of the argument
token
in an implementation-defined manner.
std::random_device
is not copyable nor movable.
Exceptions
Throws an implementation-defined exceptions derived from std::exception
on failure.
Notes
The implementation in libstdc++ expects token
to name the source of random bytes. Possible token values include "default"
, "rand_s"
, "rdseed"
, "rdrand"
, "rdrnd"
, "/dev/urandom"
, "/dev/random"
, "mt19937"
, and integer string specifying the seed of the mt19937 engine. (Token values other than "default"
are only valid for certain targets.).
The implementation in libc++, when configured to use character device as the source, expects token
to be the name of a character device that produces random numbers when read from; otherwise it expects token
to be "/dev/urandom"
.
Both libstdc++ and libc++ throw an exception if provided an unsupported token. Microsoft's stdlib ignores the token entirely.
Example
Demonstrates the two commonly available types of std::random_device
on Linux.
#include <iostream> #include <random> int main() { std::uniform_int_distribution<int> d(0, 10); std::random_device rd1; // uses RDRND or /dev/urandom for(int n = 0; n < 10; ++n) std::cout << d(rd1) << ' '; std::cout << '\n'; std::random_device rd2("/dev/random"); // much slower on Linux for(int n = 0; n < 10; ++n) std::cout << d(rd2) << ' '; std::cout << '\n'; }
Possible output:
7 10 7 0 4 4 6 9 4 7 2 4 10 6 3 2 0 6 3 7
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
P0935R0 | C++11 | default constructor was explicit | made implicit |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/random/random_device/random_device