2017-04-16 5 views
0

ich überprüft einige Codes auf nullptr und festgestellt, dass:Was bedeutet "Inline-Operator T *() const"?

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 = {}; 

was inline operator T*() const und inline operator T C::*() const bedeuten?

Funktionieren sie genauso wie inline T operator *() const oder inline T operator C::*() const?

Warum nicht den Rückgabetyp in der Deklaration angeben?

Antwort

2

Sie sind benutzerdefinierte Konvertierungsoperatorfunktionen.

Eine einfachere Funktion:

struct Foo 
{ 
    inline operator int() const { return 0; } 
}; 

Da Sie

Foo f; 
int i = f; // Invokes f.operator int() and initializes i with 
      // return value. 

Für Sie-Klasse verwenden können, die für nullptr eine anonyme Klasse ist, was es bedeutet, ist, dass es zu einem umgewandelt werden kann Zeiger oder Elementfunktionszeiger. Sie können:

int* ip = nullptr; 

Es verwendet den Rückgabewert der ersten Benutzer Umwandlung Operatorfunktion definiert ip zu initialisieren.

struct Bar 
{ 
    void bar() {} 
}; 

void (Bar::*ptr)() = nullptr; 

Es verwendet den Rückgabewert der zweiten Benutzerumwandlungsoperator Funktion definiert ptr zu initialisieren.

Verwandte Themen