西西河

主题:【原创】猛批烂书 程序员面试宝典 上 -- 晨池

共:💬64 🌺96
全看分页树展 · 主题 跟帖
家园 关于 inline

C++中,inline实际上是一个hint,它提示(或建议)编译器此成员函数宜于展开使用,既然是建议,编译器可以不予理睬。原因很多,有可能编译器并不支持函数展开,也有可能用户寻求最短代码而非高效代码。

C++不强制inline函数展开,这样做是有道理的。它增进了代码重用。当调用环境需要较小的代码时,inline就被忽略。而在重视代码效率的环境下,inline 就得到采用。由于使用了inline,函数可用于不同的环境中。

另外,inline所换来的效率提高并不一定增加空间消耗。inline展开的结果之一,就是展开的代码可以在调用环境中予以优化,这样产生的代码反而可能更小。晨池例子的第二部分就说明了这个问题。

原来的代码是 printf("%d",fact(8))

通过展开变成 printf("%d",8*8)

因为 8*8 是常数表达式,继续优化成64(40h)

printf("%d", 64)

其机器代码为

push 40h

push "%d"

call printf

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河