gpt4 book ai didi

c++ - 为什么 const 引用会延长右值的生命周期?

转载 作者:IT老高 更新时间:2023-10-28 22:20:18 35 4
gpt4 key购买 nike

为什么 C++ 委员会决定 const 引用应该延长临时对象的生命周期?

这个事实已经在网上进行了广泛的讨论,包括在 stackoverflow 上。解释这种情况的权威资源可能是这个 GoTW:

GotW #88: A Candidate For the “Most Important const”

此语言功能的基本原理是什么?知道吗?

(替代方案是临时对象的生命周期不会被任何引用延长。)


我自己的基本理论是,这种行为允许对象隐藏实现细节。使用此规则,成员函数可以在返回值或对内部已经存在的值的 const 引用之间切换,而无需对客户端代码进行任何更改。例如,矩阵类可能能够返回行 vector 和列 vector 。为了最小化拷贝,可以根据实现(行主要与列主要)将其中一个或另一个作为引用返回。无论哪个不能通过引用返回,都必须通过复制并返回该值来返回(如果返回的 vector 是连续的)。库编写者可能希望在将来更改实现(行专业与列专业)并防止客户端编写强烈依赖于实现是行专业还是列专业的代码。通过要求客户端接受作为 const ref 的返回值,矩阵类可以返回 const refs 或值,而无需对客户端代码进行任何更改。无论如何,如果知道最初的理由,我想知道。

最佳答案

它是在 1993 年提出的。其目的是消除绑定(bind)到引用时对临时对象的不一致处理。

当时还没有 RVO(返回值优化)之类的东西,所以简单地禁止将临时对象绑定(bind)到引用会影响性能。

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1993/N0345.pdf

关于c++ - 为什么 const 引用会延长右值的生命周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39718268/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com