关于c ++:初始化静态default_random_engine

Initializing static default_random_engine

本问题已经有最佳答案,请猛点这里访问。

我有一个简单的类,它对我使用default_random_engine生成随机数很有用。

随机的:

1
2
3
4
5
6
7
8
9
10
11
12
#include <random>

using namespace std;

class Random
{
    public:
        Random();
        ~Random() {}
    private:
        static default_random_engine _engine;
};

Random.cpp:

1
2
3
4
5
6
#include"Random.h"

Random::Random()
{
    _engine = default_random_engine{}; //Will this be initialized every time I create an object of type Random?
}

每次创建Random类型的对象时,是否都会初始化_engine?我只是希望它在第一次初始化之后保持原样,因为有人告诉我可以多次使用同一个引擎。


Will _engine be initialized every time I create an object of type Random?

对。

I just want it to stay like it is after the first initialization

在这种情况下,您应该这样定义它:

1
2
3
#include"Random.h"

std::default_random_engine Random::_engine;

如果没有这个,即使原始版本也无法编译(因为您没有定义静态成员)。


在我的问题中提供的链接@nathanoliver帮助我理解,这是为了在源文件中生成该类型的全局变量:

1
2
3
4
5
#include"random.h"

default_random_engine Question::_engine = default_random_engine{};

Random::Random() {  }