为什么这样:
#include <string>
#include <iostream>
using namespace std;
class Sandbox
{
public:
Sandbox(const string& n) : member(n) {}
const string& member;
};
int main()
{
Sandbox sandbox(string("four"));
cout << "The answer is: " << sandbox.member << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
给出输出:
答案是:
代替:
答案是:四
为什么C++委员会决定const引用应该延长temporaries的生命周期?
这个事实已经在网上广泛讨论过,包括stackoverflow.解释这种情况的最终资源可能就是GoTW:
这种语言功能的基本原理是什么?它知道了吗?
(另一种选择是临时的寿命不会被任何参考文献扩展.)
我自己的宠物理论的基本原理是这种行为允许对象隐藏实现细节.使用此规则,成员函数可以在不对客户端代码进行任何更改的情况下,在返回值或const引用与已内部存在的值之间切换.例如,矩阵类可能能够返回行向量和列向量.为了最小化副本,可以返回一个或另一个作为参考,具体取决于实现(行主要与列主要).无论通过引用返回哪一个都必须通过复制并返回该值来返回(如果返回的向量是连续的).库编写者可能希望在未来改变实现(行主要与列专业),并防止客户端编写强烈依赖于实现是行主要还是列主要的代码.通过要求客户端接受返回值为const ref,矩阵类可以返回const引用或值,而无需对客户端代码进行任何更改.无论如何,如果原始的理由是已知的,我想知道它.