- 448 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 04:21:43.82 ID:vJWG11Gh.net]
- >>438
C++の場合は、x=std::move(y);と書けば明示的にmove系が呼び出されるので その場合、混乱は生じないが、右辺が関数の戻り値が構造体型/クラス型の場合、 RVO(Return Value Optimization)が働いたり、右辺が「クラス名(引数列)」 のようなテンポラリオブジェクト作成の場合にはmove系が選択される という「自動振り分け機能」があり、自分が知らないだけでそれ以外にも 特殊なパターンがまだあるかもしれないことが、不安や予想しづらい 原因になっていると思う。 Rustの場合は、自動化されているかと思いきや、実際には、代入などが move/copyのどちらになるかに関しては、自動ではなく、 デフォルトmoveで、x.clone()とした場合にのみcopyという明示的に 区別する方式なんだと思う。
|

|