2016-02-22 1 views
1

Si j'ai des classes imbriquées et que ces classes imbriquées ont des membres statiques, ces membres seront-ils toujours statiques pour la classe englobante? Par exemple, si jeEst-ce qu'un membre statique à l'intérieur d'une classe imbriquée a une durée statique pour la classe englobante?

class Enclosing { 
public: 
    Enclosing(); 
private: 
    class Nested { 
    public: 
     Nested(); 
    private: 
     static int thing; 
    }; 
}; 

Si je ne

auto A = Enclosing(); 
auto B = Enclosing(); 

Will A et B être en mesure d'avoir des valeurs différentes pour thing?

Répondre

4

Est-ce que A et B être en mesure d'avoir des valeurs différentes pour thing?

Non, ils n'auront pas des valeurs différentes. Toutes les instances verront la même valeur pour thing; l'imbrication de la classe n'a aucun impact ici.

static Les variables membres sont "associées à la classe" (c'est-à-dire sur des membres non statiques associés aux instances de la classe). From cppreference;

Les membres de données statiques ne sont associés à aucun objet. Ils existent même si aucun objet de la classe n'a été défini. Si le membre statique est déclaré thread_local (depuis C++ 11), il existe un tel objet par thread. Sinon, il n'y a qu'une seule instance du membre de données statiques dans le programme entier, avec une durée de stockage statique.

Live sample.