1.1 COPY SEMANTICS(VALUESEMANTICS)
C++ではオブジェクトは基本的に組み込み型のように振舞う(Value
Semantics)。 Javaで言うところのValue Object(int, String, etc)。
int x = 0;
int y = x;
y = 10; // xの値は 0 か 10のどちらでしょうか?
5.
1.2 COPY SEMANTICS(VALUESEMANTICS)
コピーとは等価の別オブジェクト(コピー先への変更はコピー元に
影響しない)を作ること。
int x = 0;
int y = x; // xをyへコピー
assert(x == y); // コピー直後はxとyは等価。
y = 10; // yを変更。
assert(x == 0); // y(コピー先)への変更はx(コピー元)へ影響しない。
assert(y == 10);
6.5 COPY VS.MOVE
オブジェクトはいつcopy(Copy Constructor/Assignemt Operator
が呼ばれる)されて、 いつmove(Move Constructor/Assignemt
Operatorが呼ばれる)されるの?
通常の関数のoverload解決ルールと一緒。bindの可否と優先順
位。結論、rvalueはmoveされる。
Value
R V L V(non const型) L V (const 型)
R V Reference できる(優先) できない できない
L V Reference できない できる(優先) できない
const L V Reference できる できる できる
9 参考情報
"C++ RvalueReferences Explained"
"Back to the Basics! Essentials of Modern C++
Style@CPPCON2014," Herb Sutter,
"std::[email protected]"
"Effective Modern C++," Scott Meyers
http://thbecker.net/articles/rvalue_references/section_01.html
https://www.youtube.com/watch?v=xnqTKD8uD64
http://en.cppreference.com/w/cpp/utility/move