【问题标题】:Initializing static default_random_engine [duplicate]初始化静态 default_random_engine [重复]
【发布时间】:2016-08-31 10:09:21
【问题描述】:

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

随机.h:

#include <random>

using namespace std;

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

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

【问题讨论】:

  • @NathanOliver 谢谢,你帮助我理解了。
  • 如果using namespace std; 的存在不是为了缩短这个问题中的代码:请不要。把它放在.cpp 中已经够糟糕了,但是放在标题中,这是相当不可接受的。
  • @BaummitAugen 感谢您告诉我!

标签: c++ static-members


【解决方案1】:

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

是的。

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

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

#include "Random.h"

std::default_random_engine Random::_engine;

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

【讨论】:

  • 无论如何他都需要这样定义。为了得到他想要的结果,他只需要不在他的构造函数(或其他任何地方)中重新分配它。
  • @BenjaminLindley 是的,我会将其添加到我的答案中,谢谢! :)
【解决方案2】:

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

#include "random.h"

default_random_engine Question::_engine = default_random_engine{};

Random::Random() {  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多