Ich habe eine Klasse, die unäre überladen hat. Die Objekte dieses Typs wurden mit new
erstellt, daher war die Adresse der Variablen zugänglich, aber jetzt muss ich ein statisches Objekt verwenden. Ist es möglich, seine Adresse zu bekommen?C++ Adresse der Variablen ohne Operator erhalten
Antwort
Da C++ 11, können Sie die Funktion std::addressof
In C++ 11 oder höher verwenden, std::addressof(object)
, von den <memory>
Header deklariert.
Historisch gesehen war es grotesker, vor allem, wenn Sie mit den Qualifiern const
und volatile
richtig umgehen wollten. Eine Möglichkeit, die von Boost-Implementierung von addressof
ist
reinterpret_cast<T*>(
&const_cast<char&>(
reinterpret_cast<const volatile char &>(object)))
erste qualifers Zugabe während zu char&
Umwandlung, so dass reinterpret_cast
funktionieren würde, aber object
qualifiziert waren; dann entfernen sie, so dass die endgültige Umwandlung funktionieren würde; Dann nehme ich die Adresse und wandle diese in den richtigen Typ um. Solange T
dieselben Qualifikationsmerkmale wie object
hat (was als Vorlagenparameter von object
abgeleitet wird), wird der resultierende Zeiger korrekt qualifiziert.
Ist der * unary * 'Operator &' tatsächlich überlastet? –
@FredLarson Ich war überrascht, auch zu sehen: http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Member_and_pointer_operators – KugBuBu
@KugBuBu: Ja, ich sah, dass es überlastet werden kann. Aber die Frage ist nicht explizit, welche tatsächlich in diesem Fall überlastet ist. Ich habe gesehen, Klassen überladen binäre 'Operator &' (sagen wir, für String-Verkettung). Es ist ungewöhnlich, den unären Operator zu überlasten. –