C++ 移動構造和複製建構函式匹配

double64發表於2024-11-13

既有複製構造又有移動構造

這個比較好理解,普通的函式匹配規則就可以。右值移動,左值複製。 ——《C++ Primer》 P477

我們不能隱式地將一個右值引用繫結到一個左值。

有複製構造但沒有移動構造

這種情況,右值也會被複製。

如果一個類沒有移動建構函式,函式匹配規則保證該型別的物件會被複製,即使我們試圖透過呼叫 move 來移動它們時也是如此。

因為我們可以將一個 Foo&& 轉換為一個 const Foo&。因此,呼叫複製建構函式是可行的。

要有一個意識:不管左值引用還是右值引用,它們都是引用。

複製並互動賦值運算子和移動操作

此運算子有一個非引用引數,這意味著此引數要進行複製初始化。——《C++ Primer》 P478

//賦值運算子既是移動賦值運算子,也是複製賦值運算子
HasPtr& operator=(HasPtr rhs) {
    swap(*this,rhs);return *this;
}



可以結合,C++ 模板實參推斷和引用摺疊C++ 模板引數的兩種型別轉換來理解。

相關文章