std::random_device:: random_device
|
random_device
(
)
:
random_device
(
/*implementation-defined*/
)
{
}
|
(1) | (desde C++11) |
|
explicit
random_device
(
const
std::
string
&
token
)
;
|
(2) | (desde C++11) |
|
random_device
(
const
random_device
&
)
=
delete
;
|
(3) | (desde C++11) |
token
definido por la implementación.
std::random_device
no es copiable ni movible.
Contenidos |
Excepciones
Lanza una excepción definida por la implementación derivada de std::exception en caso de fallo.
Notas
La implementación en
libstdc++
espera que
token
nombre la fuente de bytes aleatorios. Los valores posibles de token incluyen
"default"
,
"hw"
,
"rand_s"
,
"rdseed"
,
"rdrand"
,
"rdrnd"
,
"/dev/urandom"
,
"/dev/random"
,
"mt19937"
, y cadenas enteras que especifican la semilla del motor mt19937. (Los valores de token distintos de
"default"
solo son válidos para ciertos objetivos.)
La implementación en
libc++
, cuando está configurada para usar un dispositivo de caracteres como fuente, espera que
token
sea el nombre de un dispositivo de caracteres que produzca números aleatorios cuando se lea de él; de lo contrario, espera que
token
sea
"/dev/urandom"
.
Tanto libstdc++ como libc++ lanzan una excepción si se proporciona un token no compatible. La stdlib de Microsoft ignora el token completamente.
Ejemplo
Demuestra los tipos comúnmente disponibles de
std::random_device
en 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() { // Nota: ¡Cómo se maneja el token proporcionado está definido por la implementación! // El token por defecto para random_device es usualmente /dev/urandom en Linux demo(std::random_device {}); // Solicita /dev/random, se bloquea cuando la entropía está vacía // Funciona en libstdc++, ignorado en msvc++, podría lanzar excepción en libc++ (a partir de Nov 2022) demo(std::random_device {"/dev/random"}); // Solicita /dev/urandom no bloqueante, asegura que RDRAND no sea utilizado // Funciona en libstdc++ y libc++, ignorado en msvc++ (a partir de Nov 2022) demo(std::random_device {"/dev/urandom"}); // Solicita "hw", utilizará generación aleatoria basada en hardware como rdrand // Funciona en libstdc++, ignorado en msvc++, lanza excepción en libc++ (a partir de Nov 2022) demo(std::random_device {"hw"}); }
Salida posible:
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
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| P0935R0 | C++11 | el constructor por defecto era explícito | hecho implícito |