C++ 类函数地址打印

shihyuyao 2014-04-20 10:22:54
#include <iostream>

using std::cout;
using std::endl;

class TestClass {
void MyFunc(void);

public:
void PrintMyFuncAddress(void);
};

void TestClass::MyFunc(void) {
return;
}

void TestClass::PrintMyFuncAddress(void) {

void (TestClass::*ptrtofn)() = &TestClass::MyFunc;
cout << ptrtofn << endl;
cout << &ptrtofn << endl;
cout << (void *&)ptrtofn << endl;
printf("%p\n", &TestClass::MyFunc);
}

int main(void) {
TestClass a;

a.PrintMyFuncAddress();
return 0;
}



打印结果:
1
0x7fff93642c60
0x4009ba // (void *&)ptrtofn
0x4009ba

有几个疑问
1. 为什么 cout << ptrtofn << endl; 是1 , 在C语言中 ptrtofn 不是代表函数指针指向函数地址但在c++ 为什么是打印出1
2. 0x7fff93642c60 // 这地址是代表什么?
3. 0x4009ba // (void *&)ptrtofn , 为什么要 (void *&)这样转类型?
...全文
527 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2014-04-20
  • 打赏
  • 举报
回复
最好debug进到cout里,看走了哪个重载。
ri_aje 2014-04-20
  • 打赏
  • 举报
回复
1. c++ 成员函数指针与 c 中的函数指针不同。 2. ptrtofn 的地址。 3. 标准规定的。

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧