首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

inline 有关问题编译通不过

2012-03-23 
inline 问题编译通不过inlinevoidf(void){cout int endl}void(*pf)()fintmain(intargc,char

inline 问题编译通不过
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)。



[解决办法]
说的很清楚了啊,
你还想要怎么说?
[解决办法]
f();
fp();

----

f();
pf();

热点排行