既有複製構造又有移動構造
這個比較好理解,普通的函式匹配規則就可以。右值移動,左值複製。 ——《C++ Primer》 P477
我們不能隱式地將一個右值引用繫結到一個左值。
有複製構造但沒有移動構造
這種情況,右值也會被複製。
如果一個類沒有移動建構函式,函式匹配規則保證該型別的物件會被複製,即使我們試圖透過呼叫 move 來移動它們時也是如此。
因為我們可以將一個 Foo&&
轉換為一個 const Foo&
。因此,呼叫複製建構函式是可行的。
要有一個意識:不管左值引用還是右值引用,它們都是引用。
複製並互動賦值運算子和移動操作
此運算子有一個非引用引數,這意味著此引數要進行複製初始化。——《C++ Primer》 P478
//賦值運算子既是移動賦值運算子,也是複製賦值運算子
HasPtr& operator=(HasPtr rhs) {
swap(*this,rhs);return *this;
}
可以結合,C++ 模板實參推斷和引用摺疊和C++ 模板引數的兩種型別轉換來理解。