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) |
2) Constructs a new
std::random_device object, making use of the argument token in an implementation-defined manner.
3) The copy constructor is deleted:
std::random_device is not copyable nor movable.Exceptions
Throws an implementation-defined exceptions derived from std::exception on failure.
Notes
The implementations in libc++ and libstdc++ expect token to be the name of a character device that produces random numbers when read from, with the default value "/dev/urandom", although where the CPU instruction RDRND is available, libstdc++ uses that as the default.
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 |
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
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/cpp/numeric/random/random_device/random_device