FreeBSD Manual Pages
std::random...andom_device(3) C++ Standard Libarystd::random...andom_device(3) NAME std::random_device::random_device - std::random_device::random_device Synopsis 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) 1) Default constructs a new std::random_device object with an imple- mentation-defined token. 2) Constructs a new std::random_device object, making use of the ar- gument token in an implementation-defined manner. 3) The copy constructor is deleted: std::random_device is not copy- able nor movable. Exceptions Throws an implementation-defined exception derived from std::excep- tion 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 de- vice 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 unsup- ported token. Microsoft's stdlib ignores the token entirely. Example Demonstrates commonly available types of std::random_device on Linux. // Run this code #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-de- fined! // 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 retroac- tively to previously published C++ standards. DR Applied to Behavior as published Correct behavior P0935R0 C++11 default constructor was explicit made implicit http://cppreference.com 2024.06.10 std::random...andom_device(3)
NAME | Synopsis | Exceptions | Notes | Example | Possible output:
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::random_device::random_device&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>
