簡體   English   中英

從派生引用到基本引用的static_cast編譯器錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM