2010-07-14 3 views

Répondre

8

operator<< est surchargée de prendre un const void*, vous pouvez donc il suffit d'insérer le pointeur dans le flux:

std::cerr << ptr; 

L'exception est que si le pointeur est un const char*, il sera interprété comme un pointeur vers un C chaîne. Pour imprimer le pointeur, vous devez jeter explicitement à un const void*:

std::cerr << static_cast<const void*>(ptr); 
+0

Sauf pour le stupide ':: std :: endl' c'est une excellente réponse. Vous devriez utiliser '' \ n'' à la place, en particulier pour ':: std :: cerr'. – Omnifarious

+0

@ Onnifarious: Je l'ai juste supprimé tout simplement parce que ce n'est pas important pour la réponse de toute façon. –

+0

@Omnifarious, quel est le boeuf avec endl? Est-ce la chasse d'eau? –

1

Vous pouvez tirer parti boost format pour printf comme la mise en forme:

std::cerr << format("%p", ptr) << endl; 

%p pointeur formats - devrait être portable entre x86 et x64.

+1

Comment est-ce mieux que 'cerr << ptr << endl'? –

+0

Ce n'est pas. Juste une autre option. –

1

Lors de l'utilisation operator<< œuvres, vous pouvez également utiliser <cstdio>:

#include <cstdio> 
... 
MY_CLASS* ptr = MY_CLASS::GetSomeInstance(); 
fprintf(std::stderr, "Pointer address: %p", ptr); 
Questions connexes