const T&vs. T &&

tal*_*les 5 c++ rvalue-reference c++11

我有以下功能:

T foo();
Run Code Online (Sandbox Code Playgroud)

而且,在另一个函数中,我正在使用返回T值,如:

const T& t = foo();
Run Code Online (Sandbox Code Playgroud)

要么

T&& t = foo();
Run Code Online (Sandbox Code Playgroud)

我想问一下:

  1. 两者都相同吗?

  2. 在记忆方面,这两种方法有什么区别?

  3. 我知道在第一种方法中,临时值生存期与参考生命周期匹配.使用右值参考时会出现同样的情况吗?

  4. 我是否应该考虑使用const rvalue reference(const T&&)?

我正在使用第一种方法,这就是我习惯的并且很好地照顾我.我仍在围绕右值参考和C++ 11商品.

Ben*_*igt 5

  1. 不,他们有不同的类型.

  2. 实现定义,但不太可能有任何区别.

  3. 对于右值和左值引用,Lifetime扩展的工作方式相同.但规则比"临时值生命周期与参考生命周期匹配"更复杂.

  4. 可能不是.我当然不会去寻找使用它的地方.如果你有使用它,最好是这样一个显着的改进,以证明使用这种不寻常的组合,以及当人们将来阅读它时会产生的混乱.