The Motivation Behind Extending Rvalue Lifetime for Const References
While the decision to extend the lifetime of temporaries when bound to const references has garnered much attention, its rationale remains a subject of speculation. To understand this language feature, let's revisit the history and intended benefits.
In 1993, a proposal was put forward to address the inconsistent treatment of temporaries when referenced. Without this provision, banning references to temporaries could have adversely affected performance due to the lack of return value optimization (RVO) at the time.
The rationale behind extending rvalue lifetimes was to ensure consistent behavior for references, regardless of whether they were bound to lvalues or temporaries. Extinguishing the lifetime of an rvalue prematurely upon binding it to a reference would have led to unpredictable and error-prone code.
Specifically, extending rvalue lifetimes enabled objects to shroud implementation details from clients. For instance, consider a matrix class that returns both row and column vectors. To optimize performance, the implementation may choose to return either a reference or a copy based on data layout decisions.
By making the return type a const reference, clients can seamlessly accept both values and references without altering their code. This flexibility empowered library authors to evolve the implementation without breaking existing applications.
In summary, the rationale for extending rvalue lifetimes for const references was to ensure consistent behavior, facilitate the concealment of implementation details, and preserve backward compatibility amid potential implementation changes.
The above is the detailed content of Why Were Rvalue Lifetimes Extended for Const References?. For more information, please follow other related articles on the PHP Chinese website!