誰かが "これを* thisに移動の意味を拡張する"ということを普通の英語で説明できますか? I am referring to this proposal。探しているものはすべてです。は& です。理由はです。右辺値の参照が一般的で、移動セマンティクスが構築されていることを理解しています。そのような拡張がrvalue参照に何を追加するのか把握できません!「* thisへの移動セマンティクスの拡張」とは何ですか?
11
A
答えて
10
ref-qualifier機能(タイプを示す*this
)により、rvaluesまたはlvalues(またはその両方)でメンバー関数を呼び出すことができ、それに基づいて関数をオーバーロードするかどうかを区別できます。 first versionは非公式の部分にいくつかの根拠を与える:
防ぐ驚き:
struct S { S* operator &() &; // Selected for lvalues only S& operator=(S const&) &; // Selected for lvalues only }; int main() { S* p = &S(); // Error! S() = S(); // Error! }
移動セマンティクスを有効にする:答えのための
class X { std::vector<char> data_; public: // ... std::vector<char> const & data() const & { return data_; } std::vector<char> && data() && { return data_; } //should probably be std::move(data_) }; X f(); // ... X x; std::vector<char> a = x.data(); // copy std::vector<char> b = f().data(); // move
7
ご希望の場合たとえば、あなたは右辺値参照と無料の関数としての演算子をオーバーロードすることができます
Foo Foo::operator+(const Foo& b) && // note the double ampersand
{
*this += b;
return *this;
}
:
Foo operator+(Foo&& a, const Foo& b)
{
a += b;
return std::move(a);
}
をメンバ関数と同じ効果を達成するために、あなたが引用された提案書を必要とします
ダブルアンパサンドは、 "このメンバ関数は右辺値でのみ呼び出すことができます"と言います。
このようなメンバー関数で明示的に*this
から移動する必要があるかどうかについては、hereを参照してください。
+0
感謝:) – AraK
関連する問題
- 1. XMLスキーマ拡張のセマンティクス
- 2. 移動セマンティクス
- 3. 出力パラメータと移動セマンティクス
- 4. ユニークPTRとセマンティクスを移動
- 5. C++ rvalueリファレンスと移動セマンティクス
- 6. C++での移動セマンティクスの起源は?
- 7. Drupal/WordpressへのJoomla拡張の移植
- 8. d2:opDotのセマンティクスとは何ですか?
- 9. Java:compareToインタフェースのセマンティクスとは何ですか?
- 10. 移動セマンティクス:ポストセットnullptr
- 11. jqueryを拡張する$(this)
- 12. C++には移動と削除のセマンティクスがありますか?
- 13. C++での移動セマンティクスの活用
- 14. FUSEでのセマンティクスのコピー/移動
- 15. セマンティクスと戻り値を移動する
- 16. セマンティクスとconst参照を移動する
- 17. このコードは合法ですか? (C++ 0xセマンティクスの移動)
- 18. Seleniumコア拡張とSelenium IDE拡張の違いは何ですか?
- 19. Sqliteデータベースの.db-shm拡張子と.db-wal拡張子は何ですか?
- 20. ISAPI拡張機能:TerminateExtensionと拡張機能デストラクタの違いは何ですか?
- 21. 拡張メソッドとローカル 'this'変数
- 22. この例では、「Iterator.Element:Textrepresentableの拡張コレクション」とは何ですか?
- 23. 例外安全なコードと移動セマンティクス
- 24. C++ Rvalue参照と移動セマンティクス
- 25. 左辺のセマンティクスを移動する
- 26. Rustのセマンティクスを移動する
- 27. ScalaでLong.toIntのセマンティクスは何ですか?
- 28. Flaskでのインポートと拡張の違いは何ですか?
- 29. 移動セマンティクスと抽象クラスの子への参照ベクトルを使用
- 30. withValueBackReferenceのセマンティクスは何ですか?
感謝を。いい答え。 – AraK