Namespaces
Variants

std::random_device:: random_device

From cppreference.net
random_device ( ) : random_device ( /*implementation-defined*/ ) { }
(1) (C++11부터)
explicit random_device ( const std:: string & token ) ;
(2) (C++11부터)
random_device ( const random_device & ) = delete ;
(3) (C++11부터)
1) 구현 정의된 token 으로 새로운 std::random_device 객체를 기본 생성합니다.
2) 새로운 std::random_device 객체를 생성하며, 구현 정의 방식으로 token 인수를 활용합니다.
3) 복사 생성자가 삭제되었습니다: std::random_device 는 복사할 수 없고 이동할 수도 없습니다.

목차

예외

실패 시 std::exception 에서 파생된 구현 정의 예외를 발생시킵니다.

참고 사항

libstdc++ 의 구현에서는 token 이 랜덤 바이트의 소스를 지정할 것으로 기대합니다. 가능한 토큰 값으로는 "default" , "hw" , "rand_s" , "rdseed" , "rdrand" , "rdrnd" , "/dev/urandom" , "/dev/random" , "mt19937" , 그리고 mt19937 엔진의 시드를 지정하는 정수 문자열이 있습니다. ( "default" 이외의 토큰 값들은 특정 대상에 대해서만 유효합니다.)

libc++ 의 구현에서 문자 장치를 소스로 사용하도록 구성된 경우, token 이 읽기 시 난수를 생성하는 문자 장치의 이름일 것으로 예상합니다; 그렇지 않으면 token "/dev/urandom" 일 것으로 예상합니다.

libstdc++와 libc++는 지원되지 않는 토큰이 제공되면 예외를 발생시킵니다. Microsoft의 stdlib 은 토큰을 완전히 무시합니다.

예제

Linux에서 일반적으로 사용 가능한 std::random_device 유형들을 보여줍니다.

#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"});
}

가능한 출력:

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

결함 보고서

다음 동작 변경 결함 보고서는 이전에 게시된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
P0935R0 C++11 default constructor was explicit made implicit