inline 问题编译通不过

liuqingwu228 2007-08-20 09:11:52
inline void f(void ) {cout<<"int"<<endl;};
void ( *pf )() = f ;
int main(int argc, char* argv[])
{

//void * const null = 0;
f();
fp();
//f(static_cast(null));


}
///////////////////////书本上解释 ,不懂哦
inline void f() {...} // 同上
void (*pf)() = f; // pf指向f
int main()
{
f(); // 对f的内联调用
pf(); // 通过pf对f的非内联调用
...
}
这种情况似乎很荒谬:f的调用被内联了,但在旧的规则下,每个取f地址的被编译单元还是各自生成了此函数的静态拷贝。(新规则下,不管涉及的被编译单元有多少,将只生成唯一一个f的外部拷贝)

即使你从来不使用函数指针,这类"没被内联的内联函数"也会找上你的门,因为不只是程序员会使用函数指针,有时编译器也这么做。特别是,编译器有时会生成构造函数和析构函数的外部拷贝,这样就可以通过得到那些函数的指针,方便地构造和析构类的对象数组(参见条款M8)。

...全文
269 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuqingwu228 2007-08-21
  • 打赏
  • 举报
回复
呵呵,疏忽了,谢谢Chiyer(星羽) 的指出哦呵呵
星羽 2007-08-20
  • 打赏
  • 举报
回复
f();
fp();

----

f();
pf();
linfengc 2007-08-20
  • 打赏
  • 举报
回复
说的很清楚了啊,
你还想要怎么说?

64,653

社区成员

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

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