struct S {
S() {}
S (const S &) = delete;
};
void f1 (S s) {}
void f2 (S &s) {}
int main() {
S s;
f2(s);
}
由於S(S &s)
被刪除,爲什麼使用f2
因爲當它宣佈它通過在爭論未拋出錯誤S &s
?當我使用f1(s)
時,它會引發錯誤。我查看了刪除函數的定義,我認爲這會拋出一個錯誤,但事實並非如此。爲什麼?爲什麼使用這個刪除的函數有效?
讓我感到困惑的是,當我看到'S(const S&)= delete'時,我想:*當我看到'f2(S&s2)'工作時,不要讓用戶做任何事情,比如* S&s'我不明白這個邏輯。 – 0x499602D2
是的,我可以看到這可能會令人困惑......但是您必須記住,構造函數(特別是那些具有單參數的構造函數)是_special_。 – Fiktik