【发布时间】:2013-02-10 01:01:44
【问题描述】:
我有以下功能:
T foo();
而且,在另一个函数中,我正在使用返回的 T 值,例如:
const T& t = foo();
或
T&& t = foo();
我想问:
两者是等价的吗?
在内存方面,这两种方法有什么区别?
我知道在第一种方法中,临时值生命周期与参考生命周期相匹配。使用右值引用时也会出现同样的情况?
我是否应该考虑使用 const 右值引用 (
const T&&)?
我正在使用第一种方法,这是我习惯的方法,并且很好地照顾我。我仍在思考右值引用和 C++11 产品。
【问题讨论】:
-
仅仅因为你可以创建一个本地右值引用变量并不意味着它是有用的。它们主要用于参数,偶尔也会返回值。
-
T是不是推导类型?这有很大的不同。 -
@sftrabbit:好点。我认为这个问题的意图是
T&&实际上是一个 r 值引用,不受引用折叠规则的约束。 -
@sftrabbit:我认为它不一定是 deduced 类型。只要它是 dependent 类型,就会导致问题:ideone.com/49b9HZ
-
当函数结果可以是结果变量静态类型的子类时,使用引用。这样你就可以避免切片,通过一些特殊的语言支持。但是,我知道的唯一用例是原始的 c++03 范围保护实现,因此很可能没有理由在您的情况下使用引用。
标签: c++ c++11 rvalue-reference