2015-09-20 6 views
75

Se indirizzo l'operatore & funziona bene, quindi perché C++ ha introdotto la funzione addressof()? L'operatore & fa parte del C++ dall'inizio - perché questa nuova funzione viene introdotta allora? Offre alcuni vantaggi rispetto all'operatore & di C?C'è qualche vantaggio nell'usare il template di funzione std :: addressof() invece di usare l'operatore & (address of) in C++?

+0

@ShafikYaghmour: no la sua non duplicare. – Destructor

+1

Sembra molto vicino a un duplicato per me ma non mi sento abbastanza forte per duplicarlo da solo ma è rilevante a prescindere. Sarebbe più convincente se spiegassi perché hai sentito che era diverso. –

+5

Si fatica a trovare una pagina che discute 'std :: addressof' senza menzionare la sua capacità di bypassare l'operatore' unario sovraccarico & '. Questa domanda mostra zero sforzi di ricerca. –

risposta

115

L'unario operator& potrebbe essere sovraccarico per i tipi di classe per darti qualcosa di diverso dall'indirizzo dell'oggetto, mentre std::addressof() ti darà sempre il suo vero indirizzo.
Contrived example:

#include <memory> 
#include <iostream> 

struct A { 
    A* operator &() {return nullptr;} 
}; 

int main() { 
    A a; 
    std::cout << &a << '\n';    // Prints 0 
    std::cout << std::addressof(a);  // Prints a's actual address 
} 

Se vi chiedete quando si fa questo è utile:
What legitimate reasons exist to overload the unary operator&?

Problemi correlati