如何编写指向std :: cerr的指针?

时间:2010-07-14 22:51:32

标签: c++ pointers iostream stderr

假设:

MY_CLASS* ptr = MY_CLASS::GetSomeInstance();

ptr输出到std::cerr的正确方法是什么,所以我可以记录它的值?注意我不想写类,只是地址。

3 个答案:

答案 0 :(得分:8)

operator<<被重载以获取const void*,因此您只需将指针插入流中即可:

std::cerr << ptr;

例外情况是,如果指针是const char*,它将被解释为指向C字符串的指针。要打印指针,您需要将其明确强制转换为const void*

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

答案 1 :(得分:1)

您可以将boost format用于printf格式:

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

%p格式指针 - 应该可以在x86和x64之间移植。

答案 2 :(得分:1)

使用operator<<时,您也可以使用<cstdio>

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