iostreams werden die meisten Zeiger auf %code% für die Anzeige darstellen - aber für %code% Zeiger existiert keine Konvertierung. Daher fällt C ++ auf die implizite Umwandlung in %code% zurück. Cast to %code% explizit, wenn Sie die Adresse ausdrucken möchten:
%Vor%Dies liegt daran, dass es für %code% keine Überladung gibt, die einen Zeiger auf %code% nimmt, und es keine Zeigerkonvertierung gibt, die sie erfüllen könnte.
Gemäß dem C ++ - Standard
für jeden Typ %code% , Pointer auf %code% , Pointer auf %code% und Pointer auf %code% werden als unterschiedliche Parameter angesehen, ebenso wie der Verweis auf %code% , der Verweis auf %code% und der Verweis zu %code% .
Operator %code% 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 %code% .
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 %code% für %code% , aber es gibt kein %code% für %code% , und die implizite Konvertierung wird %code% nicht entfernen (es wird auch %code% 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 %code% sein, ich kann keinen Nachteil sofort sehen. Aber es ist nicht.
%Vor%Ausgabe:
%Vor%