当前位置:  开发笔记 > 编程语言 > 正文

const引用返回的const引用传递的参数

如何解决《const引用返回的const引用传递的参数》经验,为你挑选了1个好方法。

我正在阅读C++ Faq第二版,常见问题解答第32.08页.

FAQ表示const引用传递的参数和const引用返回的参数可能导致悬空引用.

但是,如果参数通过引用传递并通过引用返回,则可以.

我得到它在const引用的情况下是不安全的但是在参数是非const引用的情况下它是如何安全的.

FAQ的最后一行说"请注意,如果函数通过非const引用接受参数(例如,f(string&s)),则返回此引用参数的副本是安全的,因为临时不能通过非const引用传递".

需要一些见解!!



1> Antti Huima..:

如果你喜欢

const Foo & bar(const Foo &f) { return f; }

并称之为

const Foo &ret = bar(Foo());

这个编译,但问题是现在'ret'是一个悬空引用,因为调用Foo()创建的临时对象在bar返回后被释放.这里详细的执行顺序是:

    临时Foo被分配

    调用bar时引用临时对象

    bar返回引用

    现在那个酒吧已经退回临时Foo了

    当物体被摧毁时,参考物现在悬空

但是,如果你把Foo声明为

Foo & bar(Foo &f) { return f; }

然后编译器不会接受你的调用栏(Foo()).将临时对象传递给函数时,只能通过const引用或作为副本获取; 这是语言定义的一部分.

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有