- 主题:在容纳函数返回的对象时,const T& 和 T 有啥区别?
感觉捞鱼快老了。
要是内部是个临时对象 肯定要返回对象本体,而且可以把那个临时对象写函数第一行,自动触发evo,也可以返回move减少拷贝。临时对象退栈就销毁了,这时候要是还有引用指向它,多半会崩。
要是内部是个持久对象,当然返回常引用比较省。所以stl 好多接口都是返回引用。
【 在 hgoldfish 的大作中提到: 】
:
: 弱问,在以下代码里面:
:
: const ReloadLog &rlog = reload();
:
#发自zSMTH@么么哒
--
FROM 124.127.77.*
这肯定不行啊,a退栈就没了。
传参的时候可以用常引用延长生命周期(其实就是继续压栈时候那个对象还在),往外传是相反的过程,就不行了。
【 在 MyWorkLife 的大作中提到: 】
:
: 这里显然是从函数返回一个临时对象
: 然后绑定到一个const引用
: 你的意思这样不行?
:
#发自zSMTH@么么哒
--
FROM 124.127.77.*
alloc也是退栈就没,他是个只需要分配不需要释放的奇葩函数。
【 在 hgoldfish 的大作中提到: 】
:
: 嗯。上面写的就是返回个临时变量。开 godbolt 看,使用`ReloadLog rlog =`这个写法,编译器都会直接优化成这个临时变量的引用。不会有其它的操作。等效代码是:
:
: ReloadLog *rlog = alloca(sizeof(ReloadLog));
: reload(rlog);
#发自zSMTH@么么哒
--
FROM 124.127.77.*
我仔细翻了你代码,原来你写的返回的是值类型,这样常引用确实可以延长它的生命周期。
不过我们讨论的是返回临时变量引用的问题,你这属于来瞎凑热度。
最后那个doorway是不是你马甲?暴露了,别再狂了 。
【 在 MyWorkLife 的大作中提到: 】
:
: 那我就帮你补充一个知识盲点
: 这个写法是完全合法的
: 你对生命周期的规则了解不完整
:
#发自zSMTH@么么哒
--
FROM 124.127.77.*