首页 > 解决方案 > 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在函数被多次调用时可以节省一些计算机资源吗?

如果我不使用任何静态或在代码中使用一两个如何。如果我在每种情况下都不这样做有什么区别吗?非常感谢。

标签: c++randomstaticmt19937

解决方案


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

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


推荐阅读