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++?
75
A
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
- 1. std :: addressof - strana implementazione
- 2. Quando utilizzare addressof (x) invece di & x?
- 3. Qual è il vantaggio dell'uso di std :: allocator invece di new in C++?
- 4. C++: C'è qualche motivo per usare uint64_t invece di size_t
- 5. C'è qualche vantaggio nell'usare '<< 1' invece di '* 2'?
- 6. Usare C++ CLI classe template in C#
- 7. Sovraccarico funzione template in C++
- 8. Lo std :: addressof annulla l'operatore e il requisito STL?
- 9. Come funziona questa funzione di template "size of array"?
- 10. È possibile implementare addressof() come funzione constexpr?
- 11. std :: is_function non riconosce argomento di un template in funzione
- 12. C++ std :: funzione simile
- 13. vantaggio di QString su std :: string
- 14. Devo usare "TList <String>" invece di "Array of String" sempre?
- 15. Selezione funzione template C++
- 16. Qual è il vantaggio dell'utilizzo di epoll_create1() invece di epoll_create()
- 17. Devo smettere di usare classi/interfacce di base astratte e usare invece boost :: function/std :: function?
- 18. C++ std :: mappa di template di classe Valori
- 19. C'è qualche vantaggio nell'usare Math.Floor su casting di interi espliciti?
- 20. Discussione Modello template funzione membro membro C++
- 21. Funzione friend modello di una classe template
- 22. Come sovraccaricare su std: firma di funzione in C++
- 23. C'è qualche utilità per i parametri denominati in template Parametri
- 24. Ha senso usare std :: shared_ptr <std::vector> invece di boost :: shared_array?
- 25. Specializzazione funzione template per la classe template
- 26. chiamando la funzione template di classe di base template
- 27. Comportamento della funzione template C++
- 28. std :: funzione e std :: packaged_task conversione
- 29. Qualche motivo per usare byte/short ecc. In C#?
- 30. Funzione template is_same nelle classi template
@ShafikYaghmour: no la sua non duplicare. – Destructor
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. –
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. –