我什么时候使用 std::random_device

When do I use std::random_device?

本文关键字:random device std 什么时候      更新时间:2023-10-16

根据标准,std::random_device的工作方式如下:

result_type operator()();

返回:一个非确定性的随机值,均匀分布在min()max()之间,包括。它是实现定义的 这些值是如何生成的。

几种方法可以使用它。要为引擎设定种子:

std::mt19937 eng(std::random_device{}());

作为引擎本身:

std::uniform_int_distribution<> uid(1, 10);
std::cout << dist(dev);

因为它是实现定义的,所以听起来不像std::seed_seqsrand(time(nullptr))那么强大。我更喜欢把它用作种子、发动机还是根本不使用它?

一般来说,std::random_device应该是您可以在平台上访问的最真实的随机信息的来源。话虽如此,访问它比std::mt19937或其他方法慢得多。

正确的行为是使用 std::random_device 播种类似 std::mt19937 的东西。