一.引用转化权限
先说结论:权限可以缩小和平替,但不能放大。
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的用法
如需更改数组中的内容也很简单: