为什么 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/