C++ 为什么?;运算符用于获取成员函数的地址,但不用于全局函数?
以下代码运行良好C++ 为什么?;运算符用于获取成员函数的地址,但不用于全局函数?,c++,pointers,function-pointers,member-function-pointers,C++,Pointers,Function Pointers,Member Function Pointers,以下代码运行良好 #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; } #包括 使用名称空间std; 虚无乐趣() { cout函数
#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;
}
#包括
使用名称空间std;
虚无乐趣()
{
cout函数类型T
的左值可以隐式转换为T*
([conv.func]/4.3
),但成员函数没有类似的规则
我不确定这背后的原因是什么,所以我猜我的答案是“标准如此说”。可能是因为成员函数指针使用得不太频繁,因此为它们指定额外的实现细节被认为是不必要的。从它复制与指向数据成员的指针的工作方式一致。将函数名隐式转换为函数指针类似于将数组名隐式转换为pointer(指向第一个元素)。这是从C继承来的一个特性。使指向成员的指针(无论函数与否)也能使用同样的功能,会弄乱允许派生类访问其基成员和命名空间成员的语法。
#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;
}