【C++】学习笔记草稿版系列5(内联函数)

// C
int *pi = (int*)malloc(100);
if (p == Null)  
    return -1;
// C++
int *pi = new int[100];
// 无需像C语言一样检查返回值,如果出错,new会自动报出一个异常;new很少会失败,但是申请之后往往用户会忘记释放
try
{
    int Ipi = new int[100];
}catch(const std::bad_alloc e)
{
    cout<<"new error"<<endl;
    cout<<e.what()<<endl;
    return -1;
}
//一般异常会有这个机制,但是很少使用,可参照Google的标准:不要使用C++异常

int *pi = new (std::nothrow) int[10];

内联函数(inline function)

介于宏函数和普通函数之间

// main.cpp
#include <iostream>

using namespace std;
#define SQR(i) ((i) * (i))

int main()
{
    int i = 0;
    while(i < 5)
    {
        cout<<SQR(i++)<<endl; // [ERROR]
    }
}

宏函数优缺点
+ 代码内嵌, 避免了函数调用(压栈和出栈)
- 易产生歧义;易使程序的text段体积增大 (浪费空间换取时间),不会进行类型检查

函数的优缺点
+ 一段高度抽象的逻辑,避免重复造轮子;不易产生歧义;使text段体积变小
- 函数调用的压栈与出栈的开销(浪费时间换取空间);会进行类型检查

在宏函数和函数之间:内联函数 inline

  • 内嵌,减少压栈和出栈的开销

为什么不把所有的函数都inline?
Text段体积过大
inline变成了给编译器的一个建议
不加inline一定不会inline
加了inline系统会根据实际分析是否需要inline

Google关于inline给出的标准是:
只有当函数只有10行甚至更少时才会将其定义为内联函数(inline function)

华为给出的标准是5行甚至更少

inline的整体评价:
优点:避免调用时的额外开销(入栈与出栈操作)
代价:由于内联函数的函数体在代码段中会出现多个“副本”,因此会增加代码段的空间
本质:以牺牲代码段空间为低价,提高程序运行时间的效率
适用场景:函数体很“小”,且被“频繁”调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值