Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
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)

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>

home | help