引用cppreference:
std :: random_device是一个非确定性随机数引擎,但如果不支持非确定性随机数生成,则允许实现使用伪随机数引擎实现std :: random_device.
有没有办法检查当前实现是否使用PRNG而不是RNG(然后说出错并退出),如果没有,为什么不呢?
请注意,一点点谷歌搜索显示至少MinGW std::random_device以这种方式实现,因此如果std::random_device要使用它是真正的危险.
---编辑---
而且,如果答案是否定的,有人可以给一些见解,为什么没有这样的功能/特征/ 东西,我会很感兴趣.
有没有办法检查当前实现是否使用PRNG而不是RNG(然后说出错并退出),如果没有,为什么不呢?
有一种方法:如果用随机数引擎实现std::random_device::entropy它将返回0.0(也就是说,它是确定性的).
从标准:
Run Code Online (Sandbox Code Playgroud)double entropy() const noexcept;返回:如果实现使用随机数引擎,则返回
0.0.否则,返回由operator()范围min()to 返回的随机数的熵估计log_2(max() + 1).