Namespaces
Variants

std::random_device:: random_device

From cppreference.net
random_device ( ) : random_device ( /*implementation-defined*/ ) { }
(1) (depuis C++11)
explicit random_device ( const std:: string & token ) ;
(2) (depuis C++11)
random_device ( const random_device & ) = delete ;
(3) (depuis C++11)
1) Construit par défaut un nouvel objet std::random_device avec un token défini par l'implémentation.
2) Construit un nouveau std::random_device objet, utilisant l'argument token d'une manière définie par l'implémentation.
3) Le constructeur de copie est supprimé : std::random_device n'est ni copiable ni déplaçable.

Table des matières

Exceptions

Lance une exception définie par l'implémentation dérivée de std::exception en cas d'échec.

Notes

L'implémentation dans libstdc++ s'attend à ce que token désigne la source d'octets aléatoires. Les valeurs possibles pour token incluent "default" , "hw" , "rand_s" , "rdseed" , "rdrand" , "rdrnd" , "/dev/urandom" , "/dev/random" , "mt19937" , et une chaîne entière spécifiant la graine du moteur mt19937. (Les valeurs de token autres que "default" ne sont valides que pour certaines cibles.)

L'implémentation dans libc++ , lorsqu'elle est configurée pour utiliser un périphérique de caractères comme source, attend que token soit le nom d'un périphérique de caractères produisant des nombres aléatoires lorsqu'il est lu ; sinon, elle attend que token soit "/dev/urandom" .

Tant libstdc++ que libc++ lèvent une exception si un jeton non pris en charge est fourni. La bibliothèque standard de Microsoft ignore complètement le jeton.

Exemple

Démontre les types couramment disponibles de std::random_device sur 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"});
}

Sortie possible :

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

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
P0935R0 C++11 default constructor was explicit made implicit