我了解到函数名称等于函数地址 像这样:
void func(){}
void main() { cout << func; }
但是当我使用相同的代码打印memeber函数时,它出错了。
class Test{
public:
void func() {}
void printFunc1() {
cout << func << endl;
}
void printFunc2() {
void (Test::*ptrtofn)() = &Test::func;
cout << (void*&)ptrtofn << endl;
}
};
printFunction2()
工作但printFunction1()
没有
有什么区别?
会员功能的名称不是会员功能的地址? 有什么理由吗?
答案 0 :(得分:4)
成员函数!=独立函数
只能将独立函数隐式转换为指针。
4.3函数到指针的转换[conv.func]
1 函数类型T的左值可以转换为“指向T的指针”的prvalue。结果是指向函数的指针。 5858)此转换从不适用于非静态成员函数 因为引用非静态成员函数的左值不能 获得。
答案 1 :(得分:0)
请理解“func”是该类的成员函数。直接访问它本身就是一个编译错误。你应该尝试使用指向成员函数的指针,就像你在printFunction2中所做的那样: 否则,如果func是在类范围之外的函数。那么它可以如下完成:
#include <iostream>
using namespace std;
void func() {cout<<"\n calling func\n";}
void printFunc1() {
cout << endl<<hex<<(void*)func << endl;
}
int main() {
printFunc1();
return 0;
}