2012-02-14 7 views
5

move semanticsの起源は何ですか?特にこの言語のために特別に考案されたものか、他の言語で類似したものがありましたか?後者の場合、いくつかの参考資料を与えることができます。C++での移動セマンティクスの起源は?

+0

おそらく、C++ 11で移動セマンティクスのための最も説得力のある理由の一つは、明らかauto_ptr' 'のハッキングアップ実装で明らかにC++ 03で移動セマンティクスの欠如です。 *サポートしたいものがありましたが、言語サポートの不足のためにきれいにできないものがあったことは明らかでした。 –

+3

移動セマンティクスは、人がプログラミングしていた限り、周りにありましたが、すべて手動でした。言語機能としての移動セマンティクスの導入は、型システムに「移動可能」という考え方をエンコードする方法です。コンパイラは、いつ物を移動するかを決めることができます。移動する。 C++でのセマンティクスの移動は、C++の型システムにおける情報のエンコードに重点を置いています。私は、C++と同じ型システムに重点を置いた初期の言語は認識していません。 – bames53

+0

@ bames53:それは答えとして素晴らしいかもしれません。 –

答えて

6

概念に特定の祖先はありません。 C++の動きの意味の起源は、the original proposalで述べたように、ニュースグループでの議論した様々な形で

移動セマンティクスは年間のC++フォーラム(。最も 顕著comp.lang.C++司会)で議論されてきました。

私の心には、私は間違っていないと、C++の概念である誤って評価されていない、左辺値と右辺値のC++の概念と密接に結びついています。左辺値、右辺値およびそれらの新しいC++ 11の友人を持たない言語は、C++がそれらを実装する方法では移動セマンティクスを必要としません。

しかし、より一般的には、コピーではなく移動物を動かすというコンセプトは単なる基本的な概念です。リンクされたリストを作成し、ポインタを実際にスワップするだけで要素を交換するたびに、「移動」します。基本的に。

+1

lvalueとrvalueのコンセプトはCから来たものですが、lvalueという用語のみを使用し、rvaluesは「lvalueではない」と言いました。 – bames53

+0

@ bames53:\ * nods \ *私は、提案リンクのために –

+0

+1と思っていました:) –

1

あなたは概念の背後にある動機についてより多くの情報を得るために"A Proposal to Add Move Semantics Support to the C++ Language"を読むことができるだけでなく、これはむしろ、図書館施設を使用して実装されているよりも、直接言語サポートを持っている必要が理由。

関連する問題