2015-10-22 8 views
6

Questo è per un'applicazione scritta in C++. In quali circostanze questa linea senso per qualcuno di voi, nel contesto di una definizione struct (stream è una variabile membro di tipo FILE*):Cosa potrebbe significare l'uso della parola chiave operator in C++ qui?

operator FILE*(){return stream;} 

Vado attraverso con un debugger, cercando di fare senso di ciò, ma non riesco a far attivare quella linea di codice. Non ho mai incontrato la parola chiave overload dell'operatore in questo modo. Cosa può fare questa riga di codice?

+5

operatore è un implicito operatore di conversione. La forma più comune è bool operatore, che consente di utilizzare un oggetto di classe nelle espressioni booleane come con unique_ptr e shared_ptr – jaggedSpire

risposta

9

Questo è un implicit conversion operator.

Gli operatori di conversione implicita consentono un tipo che altrimenti non convergerebbe implicitamente in un tipo di destinazione, la possibilità di farlo. Essi hanno la seguente sintassi, dove Foo è la classe dell'oggetto da convertito implicitamente, e Bar è la classe di destinazione:

class Foo{ 
public: 
    operator Bar(); // allow implicit conversion of Foo objects to Bar 
}; 

L'istanza più comune di questo operatore è in conversione di un oggetto a un valore booleano come un controllo di validità. Questo può essere visto con i flussi della libreria standard e con i puntatori intelligenti.

Si dovrebbe notare la presenza di una variazione sulla sintassi, che impedisce la conversione esistente, e rende la conversione esplicita, invece:

class Foo{ 
public: 
    explicit operator Bar(); // allow explicit conversion of Foo objects to Bar 
}; 

Questo impedisce ottenere morso da un programma di compilazione quando si alimenta accidentalmente un tipo A che può essere convertito in un tipo B in una funzione che accetta solo B. Certo, che può essere essere quello che stai andando, ma non è sempre, e hanno deciso di aggiungere questo alla lingua per aiutare le persone con necessità di una conversione esplicita.

Con l'operatore di conversione esplicita, è possibile creare un oggetto dall'oggetto origine sia attraverso la costruzione (ad usarlo per la costruzione di un oggetto del tipo di destinazione) o per colata esplicito: B{A}

+0

Sì, sembra buono –