通过引用返回 - 两者中哪一个是正确的

ami*_*cht 1 c++

我有这个功能:const A&f(...){...}

a. const A a1 = f(..);
b. const A &a2 = f(...);
Run Code Online (Sandbox Code Playgroud)

哪个更好用?在这两种情况下,如果我理解正确,我会阻止修改返回对象的可能性.在第一个选项中,将调用A的复制构造函数 - 我是否正确?

CB *_*ley 15

这取决于你想要什么.

在第一种情况下,您将创建一个由返回的引用构造的新const对象.它将是返回内容的快照,并且在整个生命周期内都有效.

在第二个中,您只需初始化一个引用.这意味着通过引用可以看到对原始对象的任何更改,但是当引用仍然存在时,存在被销毁对象将被销毁的危险.