初始c++(2)

目录

目录:

        1. 引用

        2. 内联函数inline

        3.auto关键字(大概的认识)

        4.基于范围的for循环(c++11)

        5.nullptr(c++11)


本章最重要的知识点其实是前两个(详细讲解),后面的大概只会介绍一下用法。

        文章开始!!!!

        1:引用

        1.1引用概念

        语法: 类型& 引用变量名 = 引用实体

        引用概念:引用并不是新的变量,而是给一个已知的变量起一个别名,相信别名(小名)这个东西在我们日常当中并不是很少见的,比如说孙悟空的别名--->悟空--->齐天大圣--->大圣-->猴子....从这个例子我们也可以看出来,尽管别名可能不相同,但是这些别名都是指向同一个人的。这也说明了我们的引用其实并不是开辟一块新空间,而是与引用的对象共用同一块内存空间!!

        用下图来理解!

        上面代码的意思是,定义了一个变量a值为10,然后在给a起一个别名,叫做b,a和b是共用同一块内存空间的。

        我们在vs条件下通过监视窗口也可以看出,他们是共用同一块内存空间的。

        

        需要注意的是我们在引用时,引用类型必须和引用实体类型相同。比如说

        

        1.2引用特性

        1:引用在定义时必须初始化,没有空引用

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

        3:   引用一旦有了一个实体,就不能引用其他的实体

                我们通过图来讲解

                1:引用必须初始化

                

            2:一个变量可以有多个引用,这就相当于我们前面举得例子(孙悟空),代码如下

                3:引用一旦有了实体之后,就不能在引用其他的变量了,还是通过具体的代码来进行讲解。

                

        到这里我么引用的特性就基本上讲解完毕了。

        1.3常引用(const)

        我们通过代码来进行讲解,这里面还会涉及一些代码的权限,变量在赋值是会干啥的知识点。

        加了const,可以将不同类型的引用用起来,但是可能会丢失数据。

        首先在讲解这个知识点之前,我们还需要额外的知识点。

                权限不能放大,只能缩小。

       代码如下:

        

     

        1.4  引用的使用场景

        1.4.1引用做参数

        我们直接上代码进行讲解。

        

      这是一个交换变量值函数的实现,有了引用之后我们就可以直接使用引用来实现了。

        1.4.2:引用做返回值

        我们先上一份代码:

        

int& Fun()
{
	int n = 10;
	n++;

	return n;
}

int main()
{

	cout << Fun() << endl;

	return 0;
}

         那么这里返回值是啥意思呢?

        如果引用做返回值,那么我们实际返回的内容,就是n的别名。

        我们知道局部变量出作用域的时候,会销毁。我们通过图来解释这段代码的值。

        

       

        1.5 引用做参数与返回值对于性能的影响

        我们知道,当我们函数在传参或返回一个很大的空间的时候,我们的形参会对实参进行拷贝,当实参非常大的时候,那么我们的效率会大大的降低,而用引用却可以大大的提高时间,它并不需要对实参进行拷贝。

         所以我们只需要记住:引用可以提高函数在传参或做返回值时候的效率

        

1.6指针与引用的区别 (重点)

               1.引用必须初始化,指针可以不初始化。

                2.引用一旦有了引用实体之后,就不能改变引用的指向了,指针可以改变指向。

                3.有多级指针,无多级引用。

                4.引用只是给变量起一个别名不开辟空间,指针会开辟空间存储一个变量地址                

                5.引用无NULL值,指针有NULL值

                6.使用sizeof的时候,sizeof(指针)的大小是4或8,sizeof(引用)为引用类型的大小,

                7.引用相对于指针来说比较安全。

                8.指针与引用的使用方式不同,指针需要进行解引用操作,引用为编译器处理。

2:内联函数(inline)

        关键字:inline

        使用语法:只需要在定义完函数前面加一个inline来修饰即可。 

        概念:以inline修饰的函数就称为内联函数,inline修饰的函数,编译器会自动将它展开,减少了函数栈帧的开销提高了时间效率

        但是这个展开并不是绝对的,并不是写了内联函数我们就会在相应的地方进行展开,如果直接展开的话,可能会增加可执行程序的大小。具体的展开可能编译器会帮助我们来进行检查。

        当我们使用inline前我们还需要在编译器中调一下相关的设置,具体的步骤如下。

        

                

           

        当一个内联函数的代码量非常少时,我们调用它的时候,编译器的汇编代码就不会有call这个需要开辟函数栈帧的汇编代码了。

        总结:内联函数的优点:提高了时间效率,少了函数栈帧的开销。缺点:提高了程序的代码量,可能会导致目标文件变大。

      且内联函数就相当于向编译器发送一个请求,以空间来换时间的做法。

        c++中:用enum,const替换了宏常量,内联函数替换了宏。

        

3:auto关键字(c++11)

                auto可以自动识别定义的变量,这样假如我们有一个变量类型的名字非常多的时候,auto是非常实用的。

        这个关键字以后会进行讲解。

4:基于范围的for循环(c++11)

        如果我们需要遍历一个数组我们可以这样写。

        

         使用时的语法我们以:为分界线,:前面的是用来进行迭代的变量,后面的是用来遍历的数组。

这个程序的意思是:将数组中的值拷贝到e中去,打印,然后自动++,自动判断结束。

5:nullptr(c++11)关键字

        不需要引入相关的头文件,它是一个关键字。

        其实nullptr的这个关键字的作用与NULL相似,只是说我们c语言中这个NULL为宏常量

        相当于#define NULL 0;

        nullptr就真正的为指针类型(void*)0.

       感谢大家的耐心观看。

        

        

  • 24
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值