Warum ist die Adresse dieser flüchtigen Variablen immer bei 1?

20

Ich wollte die Adresse meiner Variablen überprüfen

%Vor%

Aber es sagt immer, dass x an Adresse 1 ist. Mache ich etwas falsch?

    
Johannes Schaub - litb 23.11.2011, 08:44
quelle

3 Antworten

18

iostreams werden die meisten Zeiger auf void * für die Anzeige darstellen - aber für volatile Zeiger existiert keine Konvertierung. Daher fällt C ++ auf die implizite Umwandlung in bool zurück. Cast to void* explizit, wenn Sie die Adresse ausdrucken möchten:

%Vor%     
bdonlan 23.11.2011, 08:46
quelle
17

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.

%Vor%

Ausgabe:

%Vor%     
Steve Jessop 23.11.2011 09:47
quelle
0

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 auf T , Pointer auf const T und Pointer auf volatile T werden als unterschiedliche Parameter angesehen, ebenso wie der Verweis auf T , der Verweis auf const T und der Verweis zu volatile 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 .

    
dasblinkenlight 29.09.2016 14:37
quelle