- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
为什么 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/
我正在开发一个使用多个 turtle 的滚动游戏。玩家 turtle 根据按键命令在 Y 轴上移动。当危害和好处在 X 轴上移动时,然后循环并改变 Y 轴位置。我尝试定义一个名为 colliding(
我不明白为什么他们不接受这个作为解决方案,他们说这是一个错误的答案:- #include int main(void) { int val=0; printf("Input:- \n
我正在使用基于表单的身份验证。 我有一个注销链接,如下所示: 以及对应的注销方法: public String logout() { FacesContext.getCurren
在 IIS7 应用程序池中有一个设置 Idle-time out 默认是 20 分钟,其中说: Amount of time(in minutes) a worker process will rem
我是一名优秀的程序员,十分优秀!