C++ 播撒伪随机引擎后,std::random_设备是否应该保持活动状态?

C++ 播撒伪随机引擎后,std::random_设备是否应该保持活动状态?,c++,c++11,random,C++,C++11,Random,获取随机数的典型现代方法如下: std::random_device rd; std::mt19937 engine{rd()}; std::uniform_int_distribution<> dis{-10,10}; someInt = dis(engine); 后者不能使std::random_设备对象保持活动状态,并且具有减轻命名痛苦的优点。但我发现互联网上的很多例子都使用了前一个版本 这是保持std::random_device对象活动并为其命名的必要条件,还是有原因的

获取随机数的典型现代方法如下:

std::random_device rd;
std::mt19937 engine{rd()};
std::uniform_int_distribution<> dis{-10,10};

someInt = dis(engine);
后者不能使
std::random_设备
对象保持活动状态,并且具有减轻命名痛苦的优点。但我发现互联网上的很多例子都使用了前一个版本


这是保持
std::random_device
对象活动并为其命名的必要条件,还是有原因的?

您可以看到
std::mt19937
的构造函数接受一个
result_type
参数,这里:该页面还说
result_type
是第一个模板参数,对于
std::mt19937
来说,它是
uint\u fast32\u t
。此参数由值获取

从上面我们可以得出结论,
random_设备
的使用寿命不能跨越
引擎
的使用寿命。一旦从
随机_设备中提取种子,欢迎您立即销毁该设备

std::mt19937 engine{std::random_device{}()};
std::uniform_int_distribution<> dis{-10,10};

someInt = dis(engine);