如何用cout打印函数指针?我想使用cout打印一个函数指针,发现它不起作用。但是,在我将函数指针转换为(void*)之后,带有%p的printf也起了作用,例如#include <iostream>using namespace std;int foo() {return 0;}int main(){
int (*pf)();
pf = foo;
cout << "cout << pf is " << pf << endl;
cout << "cout << (void *)pf is " << (void *)pf << endl;
printf("printf(\"%%p\", pf) is %p\n", pf);
return 0;}我用g+编译了它,得到了如下结果:cout<pf为1cout<(void*)pf为0x100000b0cprintf(“%p”,pf)为0x100000b0c。那么cout如何处理int(*)()类型呢?我被告知函数指针被视为bool,是真的吗?cout对类型(void*)做什么?提前谢谢。编辑:无论如何,我们可以通过将函数指针转换为(void*)并使用cout打印出来观察函数指针的内容。但是它不适用于成员函数指针,编译器抱怨非法转换。我知道成员函数指针是一个非常复杂的结构,而不是简单的指针,但是我们如何观察成员函数指针的内容呢?
3 回答
米琪卡哇伊
TA贡献1998条经验 获得超6个赞
ostream & operator <<( ostream &, const void * );
编辑:
4.12布尔变换
1算术、枚举、指针或成员类型指针的r值可转换为bool类型的r值。
侃侃尔雅
TA贡献1801条经验 获得超16个赞
unsigned char
#include <iostream>#include <iomanip>struct foo { virtual void bar(){} };struct foo2 { };struct foo3 : foo2, foo { virtual void bar(){} };int main(){ void (foo3::*p)() = &foo::bar; unsigned char const * first = reinterpret_cast<unsigned char *>(&p); unsigned char const * last = reinterpret_cast<unsigned char *>(&p + 1); for (; first != last; ++first) { std::cout << std::hex << std::setw(2) << std::setfill('0') << (int)*first << ' '; } std::cout << std::endl;}
- 3 回答
- 0 关注
- 1038 浏览
添加回答
举报
0/150
提交
取消