2010-07-14 1 views

ответ

8

operator<< перегружен взять const void*, так что вы можете просто вставить указатель в поток:

std::cerr << ptr; 

Исключение, что если указатель является const char*, оно будет интерпретировано как указатель к C. Для печати указателя, вы должны бросить его в явном виде к const void*:

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

для глупой ':: Std Кроме :: endl' это отличный ответ. Вместо этого вы должны использовать '' \ n'', особенно для ':: std :: cerr'. – Omnifarious

+0

@Omnifarious: Я просто удалил его, так как это не важно для ответа в любом случае. –

+0

@ Omnifarious, какая говядина с endl? Это флеш? –

1

Вы можете использовать boost format для Printf как форматирование:

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

%p форматы указатель - должен быть переносимым между x86 и x64.

+1

Как это лучше, чем 'cerr << ptr << endl'? –

+0

Это не так. Еще один вариант. –

1

При использовании operator<< работы, вы можете также использовать <cstdio>:

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

 Смежные вопросы

  • Нет связанных вопросов^_^