C++中引用类型转换时的权限,内联函数,auto使用

本文探讨了C++中引用类型的权限转换,包括权限平替与缩小,以及内联函数的概念、使用注意事项和auto类型的动态类型特性。强调了在涉及类型转换时临时变量的处理和内联函数优化的局限性。
摘要由CSDN通过智能技术生成

一.引用转化权限

先说结论:权限可以缩小和平替,但不能放大。

1.1权限的平替

例1:在学习到C++的引用时,我们都知道引用类型的变量就是给其他变量起一个别名,使用同一块空间,在语法层面上不开空间,但在汇编指令上我们其实也可以观察到它跟指针类似也是开辟了空间的,今天我们讨论一些引用类型使用时的权限问题。

如图

为什么加上一个const,这个代码就对了。那么我们就需要知道,在涉及类型转换时,我们会生成一个临时变量,及相当于生成一个临时变量t,此时t的类型为int,同时临时变量因为具有常性,那么当它变为引用类型时必须加一个const保证它的常性,否则权限就会被放大不和规则。

同理,例2:

例3:

1.2.权限的缩小

字面意思,即将可变量改为不可变量等。如图:

1.3隐式类型转换

有这么一种情况:

那么这有什么用呢,为了方便,请从这个例子中感受:

若为多参数:

二.内联函数

首先提出一句,因为宏的容易出错性,在C++中一般不使用宏。

2.1概念

在C语言中,如果一些函数被频繁调用,不断地有函数入栈,即函数栈,会造成栈空间或栈内存的大量消耗。

为了解决这个问题,特别的引入了inline修饰符,表示为内联函数。

以inline修饰的函数称为内联函数,编译时C++编译器会自动在调用内联函数时展开,没有函数调用栈帧的开销,提高了程序运行的效率。但这基于函数内容较少的情况下,在函数内容较多的情况下C++编译器自动会判别并选择不展开。

这是因为,如果在一个main函数中有10000个调用内联函数的地方,如果展开一万次和调用一万次的效率是大不相同的,因为每次栈帧调用完会销毁,而展开后会留存。

2.2使用方式及注意事项

如图,在相应函数前加inline,那么在函数调用时会直接在调用出展开,如果我们在汇编层面观察,我们会发现原来call指令会消失,同时也引出第二个问题,即内联函数的声明和定义不能分离,我们知道在编译链接的过程中,链接时如果call指令消失,我们就无法找到函数第一行代码所执行指令的地址,即找不到函数的地址了,产生错误,所以在使用内联函数时格外需要注意这点。

三.auto类型

3.1,概念及注意事项

auto类型即不确定的类型,会根据你所初始化的内容类型来进行改变,如图:

那么此时,auto类型就是int类型。

注意的是,如果使用auto*,那么后面也需要跟相同的指针类型如图:

3.2,for循环中auto的用法

如需更改数组中的内容也很简单:

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值