博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
001 内联函数
阅读量:7097 次
发布时间:2019-06-28

本文共 1070 字,大约阅读时间需要 3 分钟。

//透彻了解inlining的里里外外

//inline函数看起来像函数,行为像函数,比宏好得多,可以免除调用函数的开销。

//过度使用inline函数,导致程序体积过大,代码膨胀导致额外的换页行为,降低指令高速缓存的击中率。
//如果inline函数本体很小,编译器所产出的码比函数调用的码更小,就适合inline函数。
//inline只是对编译器的一个申请,不是强制命令。
//inline大多数C++程序中是编译期行为。
//大部分编译器将拒绝太过复杂(循环或递归)的函数inlining。
//virtual意味着等待,知道运行期才能确定,而inlining是编译器行为。

#include "stdafx.h"

#include "string"

template<typename T>

inline const T& max(const T& a, const T& b) //明确申请inline
{
return a < b ? b : a;
}

inline void f() {} //编译器有意愿inlining

int main()

{
void (*pf)() = f; //pf函数指针

//编译器有意愿inlining函数,但是还是会为该函数生成一个函数本体

//取内联函数的地址,但是inline函数是不存在本体的,只能生成函数本体
//编译器可能隐式使用inline函数的地址
f();//inlining
pf();//不被inlining

printf("Hello World!\n");

return 0;

//谨慎使用内联,等于把自己推向手工最优化道路。

//将大多数inling限制在小型,被频繁调用的函数身上。

//不要只因为function templates出现在头文件,就将他们声明为inline。
}

class Base

{
public:
private:
std::string bm1, bm2;
};

class Derived :public Base

{
public:
//如果有个异常在构造函数抛出,已经构造好的部分会自动销毁
Derived() {}//构造函数是空的?适合inline?(不会,其实编译器会生成很多代码,最好不要内联)
~Derived() {}//析构函数也一样
private:
std::string dm1, dm2, dm3;
};

转载于:https://www.cnblogs.com/guojun/p/9698602.html

你可能感兴趣的文章
给font awesome中加入自定义图片
查看>>
JS数组控制台排序
查看>>
创业泡沫真他妈的大出血来了 --个人需要创业以谋生,行业需要创业以求变,国家需要创业以维稳...
查看>>
【转】安卓Java的虚拟机区别
查看>>
atitit.提升开发效率---MDA 软件开发方式的革命(5)----列表查询建模
查看>>
Codeforces 91C Ski Base 加边求欧拉回路数量
查看>>
深度学习项目实战——“年龄预测”
查看>>
金融安全资讯精选 2017年第二期:金融网络安全和反欺诈方法论_金融新兴技术成熟度几何?...
查看>>
预编译指令包括:宏定义;条件编译;文件包含(就是include)
查看>>
(待编辑)贪心算法学习——会议安排问题
查看>>
getopts的使用
查看>>
lnmp安装学习
查看>>
CodeChef - QRECT Rectangle Query CDQ分治
查看>>
React Native系列(6) - 编译安卓私有React-Native代码
查看>>
初探12306售票算法(一)- 理论(转)
查看>>
shell中使用sqlplus及调试相关
查看>>
java.lang.Exception: DEBUG -- CLOSE BY CLIENT STACK TRACE 的理解
查看>>
Python学习【第23篇】:利用threading模块开线程
查看>>
C++之编码问题(Unicode,ASCII,本地默认)
查看>>
字母排序
查看>>