内联函数与宏,auto关键字的使用以及认识c++11的指针空值

内联函数

内联的引出

调用函数就要建立栈帧,建立栈帧需要耗费资源。
在C语言角度采用了宏函数来解决这一问题,但是宏函数也有缺点。
缺点:
1.不方便调试。
2.代码可读性差。
3.没有类型安全的的检查

优点:
1.增强代码复用性。
2.提高性能。

C++用枚举,const,内联,inline函数,代替宏,而内联函数则是在需要经常调用,代码精简的函数前面加上inline。来使他在编译时就展开。
编码经常需要交换,这里以swap为例,我们有两种方法检查他是否有调用(call swap)
1.因为inline是一种优化。所以我们直接在release模式下查看编译器的汇编代码中是否有call swap。
2.在debug模式下,编译器默认不优化,所以我们需要对vs2013做出设置。
在这里插入图片描述
继续查看汇编,没有call直接进行展开。
在这里插入图片描述

内联的特点

1.因为实在编译的时候展开,所以是一种以空间换时间的做法。代码很长,递归就不把它作为内联函数了。
2.他只是一种建议,比如你非要定义,那编译器检测你有上述两种情况,在编译的时候他可以不接收,忽略掉内联。
3.inline不建议声明和定义分离,分离会导致链接错误,因为inline被展开没有函数地址,链接的时候找不到。

auto关键字

auto属于c++11,它的作用是自动识别类型。使用时必须初始化。在以后学习map后更有作用。
在这里插入图片描述
使用时需要注意:

  1. 一行变量是相同类型可以写在一行,一行有多个不同类型不能用。
  2. auto不能做函数参数,因为编译的时候不知道auto的类型,只有在调用的时候在传实参。
  3. 不能推导数组。(可以传引用)

基于范围的for循环

冒号":"将括号分为两部分,第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围。

int arr[] = { 1, 2, 3, 4, 5 };
	for (auto& e : arr)
	{
		e *= 2;
	}
	for (auto a : arr)
	{
		cout << a << endl;
	}

auto e传值的话,e改变不影响数组。只有传引用改变了数组内部的值。
在这里插入图片描述

指针空值

NULL实际上是一个宏
在这里插入图片描述
所以这两个实际上是一样的
在这里插入图片描述
在这里插入图片描述
然后我们进行调用,意愿是一个调用第一个,一个调用第二个。

f(0);
f(NULL);

实际上全部调用了第一个函数
在这里插入图片描述
所以在C++11引入了nullptr
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楠c

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值