正在初始化静态default_random_engine

Initializing static default_random_engine

本文关键字:random engine default 静态 初始化      更新时间:2023-10-16

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

随机.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?我只希望它在第一次初始化后保持原样,因为我被告知可以多次使用同一个引擎。

每次创建Random类型的对象时,是否会初始化_engine?

是的。

我只希望它在第一次初始化后保持原样

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

#include "Random.h"
std::default_random_engine Random::_engine;

如果没有这一点,即使您的原始版本也不会编译(因为您还没有定义静态成员)。

在我的问题中提供的链接@NathanOliver帮助我理解了这一点,即在源文件中创建一个该类型的全局变量:

#include "random.h"
default_random_engine Question::_engine = default_random_engine{};
Random::Random() {  }