我想用cout打印出一个函数指针,发现它不起作用.但是在将函数指针转换为(void*)之后它才起作用,printf与%p一样,例如
#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;
}
Run Code Online (Sandbox Code Playgroud)
我用g ++编译它并获得如下结果:
cout << pf是1
cout <<(void*)pf是0x100000b0c
printf("%p",pf)是0x100000b0c
那么cout对int(*)()类型做了什么?我被告知函数指针被视为bool,是真的吗?cout用type(void*)做什么?
提前致谢.
编辑:无论如何,我们可以通过将函数指针转换为(void*)并使用cout将其打印出来来观察函数指针的内容.但它对成员函数指针不起作用,编译器抱怨非法转换.我知道成员函数指针是一个比简单指针更复杂的结构,但是我们如何才能观察成员函数指针的内容呢?
c++ ×1