On this page
std::random_device::random_device
|
(1) | (since C++11) |
|
(2) | (since C++11) |
|
(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 exception 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", "hw", "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 commonly available types of std::random_device on 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"});
}
Possible output:
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
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