table of contents
        
      
      
    - Tumbleweed 2024.07.05-1.3
 - Leap-16.0
 - Leap-15.6
 
| std::random_device::random_device(3) | C++ Standard Libary | std::random_device::random_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
    implementation-defined
  
   token.
  
   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 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.
// 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-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
| 2024.06.10 | http://cppreference.com |