C++基础2
本文主要在于对引用进行更深一步说明。1引用不能改变指向对A取别名AA后不能再给其他量取别名AA我们可以发现aa的值改为了10但是a的值也改为了10这说明aab;这个代码并非对引用的指向改变而是直接改变了指向的对象本身也就是a的改变这也充分验证了引用就是取别名只是另一个名字多个不同名字的同一个量会一起改变。2引用在实践中主要用于函数参数的传递,普通的传参是一种值传递本质是一种拷贝开辟了形参的空间将实参的值传给形参引用传参没有开辟空间是对参数取别名然后对别名进行操作。这点在返回值传递时尤为突出在使用引用后我们不仅仅可以使用top获取栈顶数据而且可以直接利用这个函数直接修该栈顶的值这对效率大大提升。3:引用返回同样有一些问题我们在函数中定义的变量不能引用返回这是因为引用返回是返回该量但是我们离开函数会函数栈帧会被销毁我们不能在访问到函数中的变量。我们可以看到试图给c赋值失败了4const在引用中的作用普通对象可以用const引用这是一种权限的缩小但是别名具有const的性质不能再改变只能读取其值但是这里却没有影响到原本变量的使用const变量不能用普通引用这属于权限的放大是不正确的同理const引用是可以给一些常量取别名我们看到编译器是不允许修改const用的值的但是我们发现b1仍然会随着a或者b2的修改而改变这也i验证了引用就是取别名const引用就是取一个只读的别名。const引用可以对一切具有常性质的变量使用在c中临时变量是具有常性的我们在一些计算求值时编译器会提供一个临时空间存这些值此时就会产生临时变量我们可以看到此时d1的值为2这是因为在从double 的转到int类型产生了一个临时变量d1是给这个临时变量取别名。引用于指针的最大区别在于从语法上讲引用不会额外开空间指针会开空间此外引用必须初始化指针不必须但是建议。然后引用可以直接使用指针不可以需要解引用引用指定对象后不可改变指针可以。同时指针的大小是固定的引用跟原一致。5:inline修饰的函数叫内联函数会在编译时展开不会建立新的函数栈帧是为了应对C语言中的宏产生的宏的本质是替换。6nullptr:c专门为空指针产生的一种类型可以任意转换成其他指针类型原本的NULL是一个宏c中是0的字面意义C语言中是0的被强制类型转化的void*类型C语言是允许void*直接转化成其他类型的但是c不可以所以为了避免歧义使用了nullptr