Ho una classe che ha sovraccaricato unario operator&
. Gli oggetti di quel tipo sono stati creati usando new
, quindi l'indirizzo della variabile era accessibile ma ora ho bisogno di usare l'oggetto statico. È possibile ottenere il suo indirizzo?C++ ottenere l'indirizzo della variabile senza operatore e
risposta
Dal C++ 11, è possibile utilizzare la funzione di std::addressof
In C++ 11 o successivo, std::addressof(object)
, dichiarato dal intestazione <memory>
.
Storicamente, era più grottesco, soprattutto se si desidera gestire correttamente i qualificatori const
e volatile
. Una possibilità mediante la realizzazione di Boost di addressof
è
reinterpret_cast<T*>(
&const_cast<char&>(
reinterpret_cast<const volatile char &>(object)))
aggiungendo prima qualifers durante la conversione a char&
modo che reinterpret_cast
funzionerebbe comunque object
erano qualificato; quindi rimuovendoli in modo che la conversione finale funzionasse; poi finalmente prendendo l'indirizzo e convertendolo nel tipo corretto. Finché T
ha le stesse qualificazioni di object
(che sarà come un parametro del modello dedotto da object
), il puntatore risultante sarà qualificato correttamente.
L'operatore * unary * 'e 'in effetti sovraccarico? –
@FredLarson Sono stato anche sorpreso: http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Member_and_pointer_operators – KugBuBu
@KugBuBu: Sì, ho visto che può essere sovraccaricato. Ma la domanda non è esplicita su cui in realtà è sovraccaricato in questo caso. Ho visto le classi sovraccaricare l'operatore 'binario '(per esempio, per la concatenazione delle stringhe). È insolito sovraccaricare l'operatore unario. –