5

私は次の機能を持っています:

T foo();

そして、別の関数では、次のTように戻り値をいじっています。

const T& t = foo();

また

T&& t = foo();

私は尋ねたい:

  1. どちらも同等ですか?

  2. メモリに関して、これら 2 つのアプローチの違いは何ですか?

  3. 最初のアプローチでは、一時的な値の有効期間が参照の有効期間と一致することを知っています。右辺値参照を使用すると同じことが起こりますか?

  4. const 右辺値参照 ( const T&&) の使用を検討する必要がありますか?

私は最初のアプローチを使用しています。これは私が慣れ親しんでおり、問題なく対応しています。私はまだ、右辺値参照と C++11 グッズについて頭を悩ませています。

4

3 に答える 3

5
  1. いいえ、種類が異なります。

  2. 実装定義ですが、違いはほとんどありません。

  3. 有効期間の延長は、右辺値参照と左辺値参照に対して同じように機能します。しかし、ルールは「一時的な値の有効期間が参照の有効期間と一致する」よりも複雑です。

  4. おそらくそうではありません。私は確かにそれを使う場所を探しに行きません。それを使用する場合、そのような珍しい組み合わせの使用と、将来人々がそれを読んだときに生じる混乱を正当化するために、そのような大幅な改善が必要です.

于 2013-02-10T01:14:24.777 に答える
1

&& をいつ、どのような場合に使用するか疑問に思ったことがある場合は、視聴することを強くお勧めします。

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

私見、時間を投資する価値は間違いなくあります。

私の理解では:

1+2) T の型による

3) 参照値を外れても寿命に影響はありません。サイドノート: T&&がどのようなタイプであっても、現在はtという名前が付けられているため、 l 値です。

4) 自分自身に向けられたもの: const である何かからどのように移行しますか?

ベストヨッヘン

編集: 空行を追加しました。

于 2013-02-10T09:43:57.500 に答える
1
  1. それらは基本的に同じです (テンポラリの有効期間の延長が適用されます) が、1 つはconstそうで、もう 1 つはそうではありません。
  2. おそらく「メモリに関する」違いはありませんが、それは実装に依存します。
  3. はい。
  4. あなたがそれを望むケースは想像できません。

ただし、移動セマンティクスは、実際に使用している手法を時代遅れにします。当初は不要なコピーを作成しないようにすることを目的としていましたが、移動セマンティクスにより、以前は高価だったものが実質的に無料になり、はるかに読みやすくなりました。

于 2013-02-10T01:14:28.277 に答える