2017-04-01 4 views
-1

Il est de Wikipédia, si notre compilateur ne prend pas en charge C++ 11, nous pouvons mettre en œuvre un par nous-mêmes, comme ci-dessous:Personnalisé "nullptr", mais comment comprendre les codes?

const class nullptr_t 
{ 
public: 
    template<class T> 
    inline operator T*() const 
     { return 0; } 

    template<class C, class T> 
    inline operator T C::*() const 
     { return 0; } 

private: 
    void operator&() const; 
} nullptr = {}; 

Je ne comprends pas les codes ci-dessus.

mise à jour ---------------------- ------------------

Désolé , je ne l'ai pas exprimé clairement.

template<class T> 
    inline operator T*() const 
     { return 0; } 

template<class C, class T> 
    inline operator T C::*() const 
     { return 0; } 

Les codes ci-dessus, je ne comprends pas la grammaire. Je ne vois jamais ce genre de modèle de formulaire avant. (Comme « opérateur TC :: *() »)

+2

Quelle partie ne comprenez-vous pas? –

+0

Le code définit une variable 'const' nommée' nullptr' de type 'nullptr_t'. Les 2 opérateurs de conversion implicites permettent à 'nullptr' d'être utilisable partout où un pointeur peut être utilisé. –

Répondre

3
template<class T> 
inline operator T*() const 
    { return 0; } 

signifie qu'un objet de type nullptr_t peut être converti implicitement à tout type de pointeur (non-membre) . Il s'agit simplement d'une fonction operator T *() (conversion au type T *) modélisée pour tout type T.

template<class C, class T> 
inline operator T C::*() const 
    { return 0; } 

signifie que un objet de type nullptr_t peut être converti en un pointeur sur un membre non-statique, quelle classe (paramètre de modèle C) de tout type (paramètre T modèle).

Les deux opérateurs sont const, donc ne peuvent pas modifier l'objet nullptr_t.