2016-07-04 45 views
5

ho studiato che il formato delle Funzioni èStrano sovraccarico operatore, "operatore T &() const noexcept {return * _ptr;}"

(return value)operator[space]op(arguments){implementation} 

Ma, In std::reference_wrapper implementazione, v'è un operatore funzione di overloading dichiarato come operator T&() const noexcept { return *_ptr; }.

Questo operatore è diverso da T& operator() const noexcept { return *_ptr; }?. Se entrambi sono diversi, allora a cosa serve il primo?

+0

Mi chiedo quale sia la sintassi per la creazione del casting (come in C# è stranamente simile a questo) –

+0

il formato è diverso per gli operatori di conversione. –

risposta

11

operator T&() const noexcept; è un user-defined conversion function. std::reference_wrapper ha al fine di dare accesso al riferimento memorizzato, senza cambiare la sintassi:

int x = 42; 
int &a = x; 
std::reference_wrapper<int> b = x; 

std::cout << a << " " << b << std::endl; 

Assignment is a little bit trickier.


T& operator() const noexcept; è un tentativo di dichiarare operator(), ma non riesce a compilare a causa di lista parametro mancante. La sintassi giusta sarebbe:

T& operator()() const noexcept; 
//   ^
//  parameters here 

e il usage is completely different.