为什么需要 & 运算符来获取成员函数的地址,而不是全局函数?
Why & operator is needed for taking address of member functions but not for global functions?
以下代码运行良好的
#include <iostream>
using namespace std;
void fun()
{
cout<<"having some fun";
}
typedef void (*funptr)();
int main() {
// your code goes here
funptr p=fun;
p();
return 0;
}
这个不管用。
#include <iostream>
using namespace std;
class myclass
{
public:
void fun()
{
cout<<endl<<"having fun inside myclass"<<endl;
}
};
typedef void (myclass::*funptr)();
int main() {
// your code goes here
funptr p=myclass::fun; //THIS DOESN'T WORK. WHY?
myclass m;
(m.*p)();
return 0;
}
为什么是&成员函数所需的运算符?
T
的Lvalue可以隐式转换为T*
([conv.func]/4.3
),但对于成员函数没有类似的规则。
我不确定这背后的原因是什么,所以我想我的答案是"标准是这么说的"。也许是因为成员函数指针的使用频率不高,所以强制为它们提供额外的实现细节被认为是不必要的。
相关文章:
- 为什么成员函数地址离自由函数这么远?
- MFC 消息映射中的函数地址
- 设置成员 GlobalCEFApp->OnWebKit使用函数地址初始化 C++生成器
- 在Visual C 中找到调用函数地址(安全)
- 获取函数地址时出现奇怪行为
- 函数地址
- 如何在C++中打印成员函数地址
- 为什么函数指针、函数地址和函数相同
- 匹配布尔值与常量 void* 重载的函数地址
- 函数地址和函数地址的地址没有区别吗?
- 在 Linux 库中查找静态函数地址
- 调用传递给 gcc 内联汇编器 (avr-gcc) 的 const 函数地址
- 使用32位应用程序从64位kernel32.dll获取函数地址
- 为什么函数地址不是常量表达式
- 将函数地址转换为 64 位整数:未定义/行为不当
- Visual Studio在打印函数地址时出错
- 获取有关函数地址的信息
- 通过函数地址调用另一个类的函数
- 打印成员函数地址的最简单方法是什么?
- 圆括号成员函数地址错误