初始化静态default_random_engine

时间:2016-05-05 14:49:40

标签: c++ static-members

我有一个简单的类,使用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?
}

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

2 个答案:

答案 0 :(得分:3)

  

每次创建Random类型的对象时都会初始化_engine吗?

  

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

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

#include "Random.h"

std::default_random_engine Random::_engine;

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

答案 1 :(得分:0)

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

#include "random.h"

default_random_engine Question::_engine = default_random_engine{};

Random::Random() {  }