Как написать указатель на std :: cerr? - PullRequest
2 голосов
/ 15 июля 2010

Дано:

MY_CLASS* ptr = MY_CLASS::GetSomeInstance();

Как правильно вывести ptr в std::cerr, чтобы я мог записать его значение? Обратите внимание, я не хочу писать класс, просто адрес.

Ответы [ 3 ]

8 голосов
/ 15 июля 2010

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

std::cerr << ptr;

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

std::cerr << static_cast<const void*>(ptr); 
1 голос
/ 15 июля 2010

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

#include <cstdio>
...
MY_CLASS* ptr = MY_CLASS::GetSomeInstance();
fprintf(std::stderr, "Pointer address: %p", ptr);
1 голос
/ 15 июля 2010

Вы можете использовать расширенный формат для форматирования, аналогичного printf:

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

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

...