内联函数和nullptr

文章介绍了C++中的内联函数,包括其优点和缺点,以及编译器如何决定是否实现内联。内联函数适用于短小且频繁调用的场景,而长函数或递归函数则不适宜。此外,文章还提到了内联函数的声明与定义需在同一处,以及nullptr作为空指针常量与NULL和0的区别,nullptr更安全且类型更明确。
摘要由CSDN通过智能技术生成
#include<iostream>
inline int Add(int x, int y)
{
	return (x + y) * 10;
}
using namespace std;
int main()
{
	for (int i = 0; i < 10000; i++)
	{
		cout << Add(i, i + 1) << endl;
	}
}

inline后的函数就是内联函数,特点:

// define宏函数

// 优点-- 不需要建立栈帧,提高调用效率

// 缺点-- 复杂,容易出错、可读性差、不能调试

//inline内联函数

//优点:不需要建立栈帧,提高调用效率,简单,不容易出错、可读性好、可以调试

//缺点:相当于把内联函数在使用到的位置展开(实际中有很多指令过程,这里简单的看成展开),如果函数特别大,那么最后在多个地方展开这个代码内存会爆炸。比如函数有50行,在100个地方使用,那么代码实际行数是50X100=5000。如果是一般函数50行,用在100个地方,代码实际行数是100+50=150。显然不能放代码量太大的函数因此只适用于短小的频繁调用的函数


// inline对于编译器仅仅只是一个建议,最终是否成为inline,编译器自己决定(通常是10行以内的简单函数),如果函数特别复杂,通常编译器不会把它认为是内联函数

// 像类似函数就加了inline也会被否决掉

// 1、比较长的函数

// 2、递归函数

// 默认debug模式下,inline不会起作用,否则不方便调试了

//内联函数声明和定义不能分离,不能出现下面这个情况:有声明在.h头文件里,定义在另一个源文件里

//头文件fun.h
#include<iostream>
using namespace std;
inline void fun(int x);
//源文件a.cpp
#include"fun.h"
void fun(int x){
   cout<<x<<endl;
}
//源文件b.cpp
#include"fun.h"
int main(){
  fun(10);//报错,将inline去掉后可以正常编译通过
  return 0;
}

最好写内联函数直接完整地写在头文件里

下面讲解nullptr和NULL区别

首先看段代码

#include<iostream>
using namespace std;
void fun(int) {
    cout << "fun(int)" << endl;
}
void fun(int*) {
    cout<<"fun(int*)" << endl;
}
int main()
{
    fun(0);
    fun(NULL);
    fun(nullptr);
    return 0;
}
//输出fun(int),fun(int),fun(int*)

看张图

 传统定义中c++中NULL是0,用nullptr代表空指针((void*)0),将0强转成void*类型,也就是第0个位置的地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值