std::random_device:: random_device
|
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부터) |
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 |