11
有沒有理由使用「規範」簽名operator=
如何禁止轉讓
class X {
X& operator=(const X&) = delete;
X& operator=(X&&) = delete;
};
,而不是僅僅
class X {
void operator=(X) = delete;
};
時,所有你想要做的是delete
呢?
UPD:
此外,考慮以下情況,當X
有一個顯式聲明的移動或拷貝構造函數。
class X {
public:
X(X&&);
};
在這種情況下op=(X&&)
和op=(const X&)
被隱式刪除,但我想明確地表達分配是不允許的。
您的版本是否正常工作?編譯器沒有自己定義該版本,因此刪除它不應該有任何作用。 –
@MarkRansom你可以刪除任何你想要的。它不是'= default' – Abyx
爲什麼你需要刪除第一個例子中的複製和移動賦值操作符? 'X&operator =(const X&)= delete;'單獨應該夠了,不是?移動賦值運算符不會由於用戶聲明的複製賦值運算符而隱式聲明。 – Praetorian