c++ - C++中的静态和随机生成器
问题描述
#include <iostream>
#include <random>
int gen_ran(void)
{
static std::random_device rd;
static std::mt19937 gen(rd());
static std::uniform_int_distribution<int> dist(0, 9);
return dist(gen);
}
int main()
{
for (int i = 0; i < 50; i++)
{
std::cout << gen_ran() << " ";
if ((i + 1) % 10 == 0)
std::cout << std::endl;
}
}
我不太明白为什么我们可以在 gen_ran() 函数的三行中的每一行中放置一个静态。我google了很多,但似乎没有明确的答案。
我的理解是通过使用静态,我们只初始化对象一次,但每个类(random_device、mt19937、uniform_int_distribution)中的算法仍然可以生成随机数。那么static在函数被多次调用时可以节省一些计算机资源吗?
如果我不使用任何静态或在代码中使用一两个如何。如果我在每种情况下都不这样做有什么区别吗?非常感谢。
解决方案
以 开头的语句static
只执行一次,并且在程序流第一次到达语句时发生。这具有仅设置一次生成器的效果,其中包括播种。
如果您不制作它们static
,那么随机序列将在每次调用时重新初始化,gen_ran()
这将是对生成器的滥用。
推荐阅读
- php - PHP - 试图从数组中获取一个值(api输出) - 循环困难
- git - 为什么这不起作用:'git log 分支名称:文件路径'?
- r - 从最接近给定列的列中逐行选择非缺失值
- ios - 所有这些 if 语句真的有必要吗?
- angular - 需要为 ngx-editor 安装 ngx-boostrap 版本 4
- php - 在 SELECT 中包含一个实际上不在数据库 laravel 中的列
- reactjs - 语义 UI React 侧边栏仅在可见性更改时呈现推送器(redux/rematch)
- python - 如何将有序变量保存到文件中
- django - 为什么 django rest-frame 工作的序列化程序中的外键字段变为只读?
- euclidean-distance - 欧几里得距离除以数组数量的平方根?