读书人

怎么输出类中成员函数的内存地址

发布时间: 2012-04-25 19:32:32 作者: rapoo

如何输出类中成员函数的内存地址

C/C++ code
#include<iostream>using namespace std;class A{public:    void print()    {        cout<<"OK"<<endl;    }    void print2()    {        cout<<"YES"<<endl;    }private:    int a;    int b;};void main(){    A a;    cout<<a.print<<endl;}

请问这个程序为什么输出结果是1
而不是print函数在内存中的地址呢

函数名不是代表函数的首地址么,如果这样不行,哪该怎么写可以输出成员函数的内存地址


[解决办法]
猥琐的方法.
cout<<(void *)(&a::print)<<endl;

[解决办法]
你这代码也能编译通过不报错吗..
[解决办法]
楼主的代码和1楼的代码都是不合语法的.通过的编译器都是不合标准的.
(void *)(&A::print) 成员指针不能转换成普通的指针.
std::cout<<a.print //成员函数只能用来调用函数.



[解决办法]
《C++ Common Knowledge》第16章有介绍。
[解决办法]
C++中ostream的实现里定义对于函数指针的地址为true,所以cout输出为1,无论改函数有没有定义:
void f(); //只有申明
...
int main(){
cout << f; //输出1
}

如果用printf的话就需要定义函数,才能输出地址。
void f(){}
...
int main(){
printf("%d",f);
}

vc6里无论是printf还是cout流都需要定义函数体,才能正确输出函数地址。

读书人网 >C++

热点推荐