2016-05-05 1 views
2

J'ai une classe simple qui me sera utile pour générer des nombres aléatoires en utilisant default_random_engine.Initialisation statique 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? 
} 

Est-ce que _engine être initialisé à chaque fois que je crée un objet de type Random? Je veux juste qu'il reste comme après la première initialisation parce qu'on m'a dit que je pouvais utiliser le même moteur plusieurs fois.

+0

@NathanOliver Merci, vous m'a aidé à comprendre. – AnDrOiD

+2

Si 'using namespace std;' est là pour des raisons autres que de rendre le code dans cette question plus courte: S'il vous plaît ne le faites pas. Le mettre dans un '.cpp' est déjà assez mauvais, mais dans les en-têtes, c'est plutôt inacceptable. –

+1

@BaummitAugen Merci de me l'avoir fait savoir! – AnDrOiD

Répondre

0

Le @NathanOliver de lien fourni dans ma question m'a aidé à comprendre, ce qui est de faire une variable globale de ce type dans le fichier source:

#include "random.h" 

default_random_engine Question::_engine = default_random_engine{}; 

Random::Random() { } 
3

Est-ce que _engine sera initialisé chaque fois que je crée un objet de type Random?

Oui.

Je veux juste rester comme il est après la première initialisation

Dans ce cas, vous devez le définir comme ceci:

#include "Random.h" 

std::default_random_engine Random::_engine; 

Sans cela, même votre version originale ne compilera pas (puisque vous n'avez pas défini le membre statique).

+0

Il a besoin de le définir comme ça. Afin d'obtenir le résultat souhaité, il lui suffit de ne pas le réaffecter dans son constructeur (ou ailleurs). –

+0

@BenjaminLindley vrai, je vais ajouter ceci à ma réponse, merci! :) – OMGtechy