2.C++基础+类和对象(上)


别名取别名还是相当给a取别名

引用不能替代指针,比如链表,引用不能改变指向,只能用指针,C++里引用和指针相辅相成
拷贝代价大,C是指针处理,这里引用,没开空间,效率提高
传值返回:
传引用返回:
改变栈顶元素:以前:

这样不能修改栈顶的值
中间会产生临时对象,把值给这个对象,临时对象再作为表达式的值,临时对象具有常性,不能修改
引用做返回值就是返回他的别名,没产生临时对象
这种情况返回a别名的引用类似野指针
这个对象在堆上

a自己是只能读不能写,ra变成别名 后,可读可写,不合理,这叫权限的放大
用const引用

引用时缩小权限定义的,不影响原来权限,是缩小我引用的权限

const引用可以给常量取别名
返回值放在临时对象,临时对象具有常兴这样是临时对象值拷贝给rd
,这没有权限的放大
权限放大缩小只在引用 指针有
加const
这种情况会存在临时对象转换,临时变量存储![]()
这样不行:
,这样可以![]()
a,b相加结果存在临时对象里,rd变成临时对象别名,普通引用不行,cont可以,因为这个临时对象具有常性,d给给int会类型转换,会产生临时对象,ri引用的不是d是临时对象,这个临时对象具有常兴,用const就可以了,const引用临时对象以后,临时对象生命周期跟着引用走,rd销毁临时对象才会销毁

什么值都能穿过来,只是权限缩小,swap要改变const就不能 用 const可以接受普通对象,const对象,临时对象,既减少了拷贝,里面也不改变
这里就不用加const了
,double给int 会类型转换,中间会产生临时变量 ,double 给double没有临时变量,只有类型转换,还要这个表达式+,调用一个函数函数传值返回会有拷贝嘛 ,产生临时变量,不用加个const,强行加个const也可以
面试可能问:
底层:引用指针都一样

程序刚开始执行main调用栈真ebp和esp之间就是栈帧空间大小,ebp是栈底,以栈底为相对位置算变量位置,这是显示符号,何不显示符号的区别
最后函数代码不是0就出错了,这是空引用

更多推荐
所有评论(0)