C++入门基础(2)【函数重载、引用、内联函数、auto、范围for、nullptr】


目录

1.函数重载

1.1概念:

1.2使用:

1.3浅谈C++支持重载的原因

2.引用

2.1概念:

2.2性质:

2.3使用 :

2.4效率问题

3.内联函数

3.1概念:

3.2性质:

3.3优劣:

4.auto关键字(C++11)

4.1概念:

4.2性质:

5.范围for循环(C++11) 

5.1概念:

5.2使用条件:

5.3使用:

6.空指针nullptr

6.1为什么需要nullptr


1.函数重载

1.1概念:

同一作用域中同名的函数,且这些同名函数的参数个数不同或参数类型不同或参数顺序不同 

1.2使用:

注意:函数重载与返回值无关

1.3浅谈C++支持重载的原因

在C语言中,汇编指令里的函数名就是函数的名字本身没加任何修饰;在C++中,汇编指令里的函数名不仅仅只有函数名,还使用了函数的参数进行修饰,使用了参数进行修饰的函数名更加复杂,但也使得C++能支持函数重载。

2.引用

2.1概念:

引用类型的变量不会创建一个新的变量,而是为另一个变量取一个别名,从语法层面上看,引用不会开空间,引用类型的变量和被引用的变量占用同一块空间

2.2性质:

1.引用在使用时必须初始化

2.一个变量可以有多个引用

3.一个引用一旦引用了一个对象,就不能再去引用其他对象

4.引用的权限只能小于等于被引用对象

补充:

2.3使用 :

1.作为函数参数使用,例如swap(int* a,int* b)函数不再需要传地址,只需将swap()函数的参数改为引用类型swap(int& a,int &b),既方便理解又方便操作

2.作为返回值,若使用引用做返回值,需要保证返回的对象在出当前作用域时还处于生命周期内,否则引用可能会变成空引用或野引用

2.4效率问题

当引用作为函数的参数时,能起到类似指针的效果,若给一个函数传入大量参数,值传参需要浪费大量空间,引用则只需要取别名;作为返回值时同理。

注意:引用在底层实现其实还是需要开空间的,是通过指针方式来实现的,在语法层面上用我们上面的概念来解释也是没有问题的

3.内联函数

3.1概念:

在C++中用inline修饰的函数叫作内联函数,与C的宏有些相似,编译时C++编译器会在调用内联函数处将函数体展开,无需建立栈帧

3.2性质:

1.内联函数声明和定义不能分离,若分离会出现链接错误

2.函数是否内联取决于编译器,当函数使用inline修饰时若函数体较小,编译器会将其视为内联函数,若函数体较大编译器可能会忽视inline。它可以防止当内联函数的函数体过大时导致的OBJ文件过大。

3.3优劣:

内联函数可以减少栈帧的建立次数,但同时会使用更大的空间。总的来说是一种空间换时间的做法。

4.auto关键字(C++11)

4.1概念:

使用auto修饰的变量可以根据初始化时右值的类型情况自动推导

4.2性质:

1.使用auto关键字修饰的变量必须初始化

2.auto不能作为函数参数,编译时无法确定函数类型

3.不能声明和定义数组

4.auto若是引用类型则必须加上& 

5.auto类型变量同一行初始化时变量类型需相同

5.范围for循环(C++11) 

5.1概念:

C++11中的范围for循环后的括号由冒号“ :”分为两部分:第一部分是迭代时用来记录序列中值的变量,第二部分则表示被迭代的序列

5.2使用条件:

需在序列范围可知的区域中使用,下面的例子就无法使用范围for


void Testfor(int a[])
{
    for(auto& i : a)
        cout<< i <<endl;
}
5.3使用:

下面是使用范围for和引用类型结合进行数组中值的改动

6.空指针nullptr

6.1为什么需要nullptr

在C中对NULL是这样定义的

#ifndef NULL
#ifdef __cplusplus
#define NULL   0
#else
#define NULL   ((void *)0)
#endif

可以看到如果我们是使用C++,NULL就被定义为0。NULL若是为0,下面这种场景我们就无法解决了,我们若是想让NULL调用第一个func(int*),0调用后一个func(int)

可以看到都调用后一个func(int)。为此,C++使用关键字nullptr表示空指针,这样上面的问题就得到了解决。

注意:nullptr可以直接使用,无需头文件。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值