- 主题:在容纳函数返回的对象时,const T& 和 T 有啥区别?
不懂c++就别在这里大放厥词了
好歹你也去翻下spec
【 在 iwantfly 的大作中提到: 】
: 标 题: Re: 在容纳函数返回的对象时,const T& 和 T 有啥区别?
: 发信站: 水木社区 (Fri Mar 21 19:41:51 2025), 站内
:
: public:
: ReloadLog reload();
:
: const ReloadLog &rlog = reload();
: 我也觉得这种用法是一种非常规用法
: 从逻辑上c++是不设计这种语义的支持的
: 严格上来说是有歧义的
: 虽然可能编译器能通过,并不推荐这种用法
: 这种声明正常应该使用的模式应该还是这样
: ReloadLog rlog = reload();
:
: 【 在 poggy 的大作中提到: 】
: : 我也觉得, 无论返回的是临时变量还是临时返回值, 返回临时变量的引用都不是一个正确的方式,
: : 虽然, 也未必会野指针。
: : 除非你显示的提供移动拷贝构造函数。 然后使用std::move。
: : ...................
:
: --
:
: ※ 来源:·水木社区 mysmth.net·[FROM: 111.194.202.*]
--
FROM 117.129.55.*
你懂个啥?spec的四种写法?
就是你这种spec专家太多了,c++ 才落个这种地步
【 在 MyWorkLife 的大作中提到: 】
: 不懂c++就别在这里大放厥词了
: 好歹你也去翻下spec
--
FROM 111.194.202.*
那你为什么不去自创一个f*k c++呢?
在这里bb啥
【 在 iwantfly 的大作中提到: 】
: 标 题: Re: 在容纳函数返回的对象时,const T& 和 T 有啥区别?
: 发信站: 水木社区 (Sat Mar 22 13:05:17 2025), 站内
:
: 你懂个啥?spec的四种写法?
: 就是你这种spec专家太多了,c++ 才落个这种地步
:
: 【 在 MyWorkLife 的大作中提到: 】
: : 不懂c++就别在这里大放厥词了
: : 好歹你也去翻下spec
:
: --
:
: ※ 来源:·水木社区 mysmth.net·[FROM: 111.194.202.*]
--
FROM 117.129.55.*
我说的是c++不行吗?
我说的是你不行
理解问题只知道咬文嚼字
纠结细枝末节,而忽略其本质
c++的确也有问题, 它的问题就是容易招惹你这种只会纸上谈兵的程序员
【 在 MyWorkLife 的大作中提到: 】
: 那你为什么不去自创一个f*k c++呢?
: 在这里bb啥
--
FROM 111.194.202.*
哈哈,你随意
我就喜欢看人表现
不知道你是怎么做到这么无知但自信的
【 在 iwantfly 的大作中提到: 】
: 标 题: Re: 在容纳函数返回的对象时,const T& 和 T 有啥区别?
: 发信站: 水木社区 (Sat Mar 22 20:44:44 2025), 站内
:
: 我说的是c++不行吗?
: 我说的是你不行
: 理解问题只知道咬文嚼字
: 纠结细枝末节,而忽略其本质
: c++的确也有问题, 它的问题就是容易招惹你这种只会纸上谈兵的程序员
:
:
: 【 在 MyWorkLife 的大作中提到: 】
: : 那你为什么不去自创一个f*k c++呢?
: : 在这里bb啥
:
: --
:
: ※ 来源:·水木社区 mysmth.net·[FROM: 111.194.202.*]
--
FROM 117.129.55.*
感觉捞鱼快老了。
要是内部是个临时对象 肯定要返回对象本体,而且可以把那个临时对象写函数第一行,自动触发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.*
那我就帮你补充一个知识盲点
这个写法是完全合法的
你对生命周期的规则了解不完整
【 在 hyperLee 的大作中提到: 】
: 标 题: Re: 在容纳函数返回的对象时,const T& 和 T 有啥区别?
: 发信站: 水木社区 (Tue Mar 25 08:32:35 2025), 站内
:
: 这肯定不行啊,a退栈就没了。
:
: 传参的时候可以用常引用延长生命周期(其实就是继续压栈时候那个对象还在),往外传是相反的过程,就不行了。
:
: 【 在 MyWorkLife 的大作中提到: 】
: :
: : 这里显然是从函数返回一个临时对象
: : 然后绑定到一个const引用
: : 你的意思这样不行?
: :
:
: #发自zSMTH@么么哒
: --
:
: ※ 来源:·水木社区
http://www.mysmth.net·[FROM: 124.127.77.*]
--
FROM 117.129.55.*
我仔细翻了你代码,原来你写的返回的是值类型,这样常引用确实可以延长它的生命周期。
不过我们讨论的是返回临时变量引用的问题,你这属于来瞎凑热度。
最后那个doorway是不是你马甲?暴露了,别再狂了 。
【 在 MyWorkLife 的大作中提到: 】
:
: 那我就帮你补充一个知识盲点
: 这个写法是完全合法的
: 你对生命周期的规则了解不完整
:
#发自zSMTH@么么哒
--
FROM 124.127.77.*