关于函数申明顺序的一个怪问题

wlbfzy 2006-01-12 05:47:46
class Friendly
{
int i ;
public:
Friendly(int theInt):i(theInt){}
friend void f(const Friendly&);
void g(){f(*this);}
};

void h()
{
f(Friendly(1));
}

void f(const Friendly& fo)
{
cout<<fo.i<<endl;
}

int main()
{
h();
Friendly(2).g();
return 0;
}

问题:这段代码是可以运行的,那么在h()中是如何识别在他下面才定义的f()的呢?没什么没有出现f()未申明的编译错误呢?不明白,望大虾给解释一下,谢过!
...全文
95 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wlbfzy 2006-01-13
  • 打赏
  • 举报
回复
原来,友元函数的申明有两个作用:1.申明友元,2.申明友元这个函数。谢谢!
cunsh 2006-01-12
  • 打赏
  • 举报
回复
在class { }里有friend void f(const Friendly&);的声明了.

64,654

社区成员

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

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