2016-05-05 11 views
2

Ich habe eine einfache Klasse, die für mich mit Zufallszahlen unter Verwendung default_random_engine nützlich sein wird.Initialisierung statisch 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? 
} 

Wird _engine jedes Mal, wenn ich Random ein Objekt vom Typ erstellen initialisiert werden? Ich will nur, dass es so bleibt, wie es nach der ersten Initialisierung ist, weil mir gesagt wurde, dass ich dieselbe Engine mehrmals benutzen kann.

+0

@NathanOliver Danke, Sie hat mir geholfen, zu verstehen. – AnDrOiD

+2

Wenn das 'using namespace std;' aus anderen Gründen als den Code in dieser Frage kürzer zu machen ist: Bitte nicht. Es ist schon schlimm genug, es in eine '.cpp 'zu schreiben, aber in Headern ist es eher inakzeptabel. –

+1

@BaummitAugen Danke, dass du mich informiert hast! – AnDrOiD

Antwort

0

Der Link @NathanOliver in meiner Frage zur Verfügung gestellt hat mir geholfen, zu verstehen, was eine globale Variable dieses Typs in der Quelldatei zu machen ist:

#include "random.h" 

default_random_engine Question::_engine = default_random_engine{}; 

Random::Random() { } 
3

Wird _engine jedes Mal initialisiert, wenn ich ein Objekt vom Typ Random anlege?

Ja.

ich es einfach bleiben wollen, wie es nach der ersten Initialisierung

In diesem Fall können Sie es wie so definieren sollte:

#include "Random.h" 

std::default_random_engine Random::_engine; 

Ohne diese, auch die Originalversion wird nicht kompiliert (da Sie das statische Element nicht definiert haben).

+0

Er muss es trotzdem so definieren. Um sein gewünschtes Ergebnis zu erhalten, muss er es einfach nicht in seinem Konstruktor (oder anderswo) neu zuweisen. –

+0

@BenjaminLindley wahr, ich werde das zu meiner Antwort hinzufügen, danke! :) – OMGtechy