Ich wollte die Adresse meiner Variablen überprüfen
%Vor%Aber es sagt immer, dass x an Adresse 1 ist. Mache ich etwas falsch?
Es gibt ein operator<<
für const void*
, aber es gibt kein operator<<
für volatile void*
, und die implizite Konvertierung wird volatile
nicht entfernen (es wird auch const
nicht entfernen).
Wie GMan sagt, sollte die cv-Qualifikation des angegebenen Typs für das Drucken einer Adresse irrelevant sein. Vielleicht sollte die in 27.7.3.6.2 definierte Überlast operator<<(const volatile void* val);
sein, ich kann keinen Nachteil sofort sehen. Aber es ist nicht.
Ausgabe:
%Vor% Dies liegt daran, dass es für operator <<
keine Überladung gibt, die einen Zeiger auf volatile
nimmt, und es keine Zeigerkonvertierung gibt, die sie erfüllen könnte.
Gemäß dem C ++ - Standard
für jeden Typ
T
, Pointer aufT
, Pointer aufconst T
und Pointer aufvolatile T
werden als unterschiedliche Parameter angesehen, ebenso wie der Verweis aufT
, der Verweis aufconst T
und der Verweis zuvolatile T
.
Operator <<
hat keine Überladung für Zeiger auf nicht-statische Elemente , Zeiger auf flüchtige Zeiger oder Funktionszeiger, also versucht die Ausgabe solcher Objekte die implizite Konvertierung in bool
.
Tags und Links c++ iostream implicit-conversion cout memory-address