繁体   English   中英

const T&vs. T &&

[英]const T& vs. T&&

我有以下功能:

T foo();

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

const T& t = foo();

要么

T&& t = foo();

我想问问:

  1. 两者都相同吗?

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

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

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

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

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

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

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

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

  1. 它们基本相同(临时应用的寿命延长),但一个是const ,一个不是。
  2. 可能没有“记忆明智”的差异,但这依赖于实现。
  3. 是。
  4. 我无法想象你想要的那种情况。

然而,移动语义真的使你使用过时的技术。 它最初的目的是让人们避免制作不必要的副本,但现在使用移动语义,之前很昂贵的东西现在几乎是免费的,而且更具可读性。

如果您想知道何时以及是否使用&&,我强烈建议您观看

http://channel9.msdn.com/Shows/Going+Deep/Cpp-and-Beyond-2012-Scott-Meyers-Universal-References-in-Cpp11

Imho,这绝对值得投入时间。

据我所知:

1 + 2)取决于T的类型

3)对参考值的寿命没有影响。 旁注:无论T &&最终是类型明智的,它现在都有一个名字: t ,因此是一个l值。

4)针对我自己的那种:你如何从那些const的东西中移动?

最好的Jochen

编辑:添加空行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM