正在初始化静态 default_random_engine

Initializing static default_random_engine

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

Random.h:

#include <random>

using namespace std;

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

Random.cpp:

#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

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

#include "Random.h"

std::default_random_engine Random::_engine;

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

我问题中提供的link@NathanOliver帮我理解了,就是在源文件中做一个该类型的全局变量:

#include "random.h"

default_random_engine Question::_engine = default_random_engine{};

Random::Random() {  }