为什么函数可以作为右值给函数指针赋值,而成员函数必须取地址才能给指针赋值?

weresdfa 2015-04-28 10:44:38

void f(){}
class C
{
public:
void g(){}
};
int main()
{
void(*pf)() = f;//没有问题
void(C::*pg)() = &C::g; 在等号右边必须要有取地址符号&,否则编译错误
return 0;
}

为什么void(*pf)() = f;可以直接用f赋值,
而void(C::*pg)() = &C::g; 在等号右边必须要有取地址符号&

谢谢。
...全文
223 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
苏叔叔 2015-04-28
  • 打赏
  • 举报
回复
这是语法要求,对于虚函数,更需要如此
kuangbao9 2015-04-28
  • 打赏
  • 举报
回复
函数名本身就表示函数的入口,即函数的入口地址,所以可以直接赋值。
tangtangtangbaoli 2015-04-28
  • 打赏
  • 举报
回复
c++语言规定就这样 本质c++类的成员函数被编译器编译后和全局函数一样 就是函数的名子比较特别 多了个固定参数而已 纯c++语法
  • 打赏
  • 举报
回复
引用 3 楼 weresdfa 的回复:
[quote=引用 1 楼 kuangbao9 的回复:] 函数名本身就表示函数的入口,即函数的入口地址,所以可以直接赋值。
为什么成员函数就需要加上呢?[/quote] 这就是个语法规定,记住就行了
weresdfa 2015-04-28
  • 打赏
  • 举报
回复
引用 1 楼 kuangbao9 的回复:
函数名本身就表示函数的入口,即函数的入口地址,所以可以直接赋值。
为什么成员函数就需要加上呢?

64,662

社区成员

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

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