001 内联函数

news/2024/11/10 0:32:51

//透彻了解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


http://www.niftyadmin.cn/n/3843814.html

相关文章

兰州新区农村“三变”改革:近万农民“变身”企业工人

图为兰州新区现代农业示范园的温室大棚栽植的百合花。 魏建军 摄 图为兰州新区现代农业示范园的温室大棚栽植的百合花。 魏建军 摄 中新网兰州1月24日电(记者 魏建军)寒冬时节&#xff0c;兰州新区现代农业示范园的温室大棚里暖意融融。只身从永登古山乡来这里管理草莓大棚的王…

改善用户体验 Web前端优化策略总结

前端是庞大的&#xff0c;包括HTML、CSS、Javascript、Image、Flash等等各种各样的资源。前端优化是复杂的&#xff0c;针对方方面面的资源都有不同的方式。那么&#xff0c;前端优化的目的是什么&#xff1f;1. 从用户角度而言&#xff0c;优化能够让页面加载得更快、对用户的…

linux7.0开启IP转发功能

开启IP转发功能 cat /proc/sys/net/ipv4/ip_forward 查看IP转发功能是否开启 vim /usr/lib/sysctl.d/00-system.conf 修改其配置文件 net.ipv4.ip_forward 1 开启IP转发功能 “0”代表没有开启 sysctl -p /usr/lib/sysctl.d/00-system.conf //刷入系统

紧急的版本,时间很紧,没有时间写用例,如何做好测试?

**1、安排业务熟悉的人做这个紧急版本的测试2、把版本的的修改点&#xff0c; 新增需求搞清楚&#xff0c;搞清楚这些变更是如何实现的3、罗列主流程的测试用例&#xff08;思维导图&#xff09;&#xff0c;优先保证主流程没有问题&#xff0c;然后再发散测试4、在执行测试过程…

Servlet生命周期 和 继承关系

三 servlet的生命周期 &#xff08;一个servlet类的对象 创建----》销毁&#xff09;第一次访问 某个servlet的时候 首先调用其 构造函数public StudentServlet(){System.out.println("servlet被创建了");}第一次访问 在构造函数之后 调用其 init初始化方法 &#x…

Python 迭代器、生成器和列表解析

迭代器 迭代器在 Python 2.2 版本中被加入, 它为类序列对象提供了一个类序列的接口。 Python 的迭代无缝地支持序列对象, 而且它还允许迭代非序列类型, 包括用户定义的对象。即迭代器可以迭代不是序列但表现出序列行为的对象, 例如字典的 key , 一个文件的行, 等等。迭代器有以…

linux7.0计划任务

计划任务为用户 natasha 配置一个定时计划任务&#xff0c;在每天 14:23 分执行 I AM RHCE which echo 查看ehco命令位置 id natasha 查看是否存在natasha用户 useradd natasha 创建natasha用户 crontab –e –u natasha 对natasha用户配置计划任务 23 14 * * * /usr/bin/echo …

结构体与共用体04 - 零基础入门学习C语言56

第十章&#xff1a;结构体与共用体04 让编程改变世界 Change the world by program 链表例题讲解 [caption id"attachment_187" align"aligncenter" width"263"]链表例题[/caption] 今天&#xff0c;我们将以图文并茂的方式来展示链表的具…