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()函数的三行中每一行都放一个静态。我谷歌了很多,但似乎没有明确的答案。

我的理解是通过使用静态,我们只初始化对象一次,但每个类(random_device, mt19937, uniform_int_distribution)中的算法仍然可以生成随机数。那么当函数被多次调用时,静态能节省一些计算机资源吗?

如果我不使用任何静态或在代码中使用一个或两个呢?如果我不这样做会有什么不同吗?非常感谢。

static开头的语句只执行一次,并且在程序流第一次到达这些语句时发生。这样做的效果是只设置一次生成器,其中包括播种。

如果你不让它们成为static,那么随机序列将在每次调用gen_ran()时重新初始化,这将是对生成器的误用。

最新更新