2010-07-14 51 views

回答

8

operator<<超载采取const void*,所以你可以简单地插入指针到流:

std::cerr << ptr; 

唯一的例外是,如果指针是const char*,它会被解释为指针C字符串。要打印的指针,你需要明确地将它转换为const void*

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

除笨'::性病:: endl'这是一个很好的答案。你应该使用''\ n',而不是':: std :: cerr'。 – Omnifarious 2010-07-14 23:20:01

+0

@Omnifarious:我只是完全删除它,因为它对于答案无关紧要。 – 2010-07-14 23:21:23

+0

@Omnifarious,与endl的牛肉是什么?它是齐平的吗? – 2010-07-14 23:24:20

1

您可以利用boost format为的printf的格式化:

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

%p格式指针 - 应该是X86和X64之间进行移植。

+1

这比'cerr << ptr << endl'好得多吗? – 2010-07-14 23:06:49

+0

不是。只是另一种选择。 – 2010-07-14 23:10:02

1

在使用operator<<的作品,你还可以使用<cstdio>

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