6
爲什麼我們不能同時使用getAB() &&
和getAB()
這兩種方法,但是可以實現這些方法中的任何一種?爲什麼我們不能實現`getAB()&&`和`getAB()`兩個方法?
代碼:
struct Beta {
Beta_ab ab;
Beta_ab && getAB() && { cout << "1"; return move(ab); }
};
int main() {
Beta_ab ab = Beta().getAB();
return 0;
}
- 作品:http://ideone.com/m9d0Tz
- Doen't作品:http://ideone.com/QIQtZ5
代碼:
struct Beta {
Beta_ab ab;
Beta_ab && getAB() { cout << "2"; return move(ab); }
};
int main() {
Beta b;
Beta_ab ab = b.getAB();
return 0;
}
代碼:
struct Beta {
Beta_ab ab;
Beta_ab && getAB() && { cout << "1"; return move(ab); }
Beta_ab && getAB() { cout << "2"; return move(ab); }
};
int main() {
Beta b;
Beta_ab ab1 = b.getAB();
Beta_ab ab2 = Beta().getAB();
return 0;
}
爲什麼代碼的第一兩個例子作品,但最後一個例子不起作用?
與您的問題無關,但在製作[MCVE](https://stackoverflow.com/help/mcve)時,請確保其中沒有無關的錯誤。無關的錯誤會分散實際問題。我當然在談論你在'main'函數中重新定義變量'ab'。 –
如果有任何重載是引用限定的,那麼_all_重載必須是引用限定的 - 將第二個重載更改爲「Beta_ab && getAB()&{cout <<」2「;返回移動(ab); }'。 (不作爲答案張貼,因爲這肯定是一個騙局。) – ildjarn
可以在左值*或右值上調用不帶ref參數限定符的重載,例如'Beta_ab && getAB()'。rvalue ref限定符「Beta_ab && getAB()&&」的重載只能在rvalues上調用。因此,如果兩者都允許共存,那麼在右值上調用'getAB()'將會是*模糊的。 –