[英]static_cast compiler error from derived reference to base reference
在我發布的最近一個問題的評論中( C ++:在派生類構造函數中調用基類賦值運算符的錯誤形式? ),我遇到了另一個問題,涉及如何使用static_cast從派生類型轉換為基類。 支持此問題的文檔可以在以下位置找到: 為什么對基類的static_cast(* this)創建一個臨時副本? 。
我的主要問題是,使用static_cast將其強制轉換為派生類中的基類現在沒有問題。 但是,我無法執行從派生引用到基本引用的靜態轉換。 我只在派生類的相等運算符中執行此操作。 這是問題所在:
bool Derived::operator==(const Derived& other_derived) {
// first call the operator == from the base class...
if (static_cast<Base&>(*this) == static_cast<Base&>(other_derived)) {
// continue checks for derived member variables
}
}
編譯器對上面的if語句大喊大叫。 它的static_cast沒問題,但是不能將static_cast從派生類解釋為基類。 如果刪除引用,則可以很好地編譯,但是如兩個引用的問題所示,這將不必要地創建一個臨時對象。
結果,我想知道是否可能缺少從派生類轉換為基類的構造函數。 我將在哪里編寫這樣的構造函數(因為它是基本類型的構造函數)? 我認為在基本源代碼中這樣做沒有任何意義,因為這實際上並不能使基類自定義並破壞可重用代碼的精神嗎?
一個更簡單的選擇是只接受該函數中對象的臨時創建,但是該函數可能會最終被調用,因此我不確定是否可以接受性能下降。
我還有其他需要考慮的地方嗎? 與往常一樣,在此先感謝您的幫助。
為此,所有功勞歸@jogojapan所有。 從未將派生類和基類中的operator ==定義/聲明為const。 將所有相等和不相等運算符更改為const函數即可生成程序。 另外,我還必須稍微更改static_cast語法以強制轉換為const類型。 那是:
static_case<const Base&>(derived_object);
再次感謝您的幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.