首頁  >  文章  >  後端開發  >  在類型之間轉換時:來源物件優先還是目標物件優先?

在類型之間轉換時:來源物件優先還是目標物件優先?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-07 08:39:03696瀏覽

When Converting Between Types: Does the Source or Destination Object Take Precedence?

轉換建構子與轉換運算子:優先權

在C 中,轉換建構子和轉換運算子都提供了在不同類型之間轉換物件的方法。當兩者都可用於給定轉換時,了解它們的優先順序對於確定呼叫哪一個至關重要。

優先權建立

轉換建構子與轉換運算子之間的優先權是由C 標準(13.3.1.4) 定義:

重載解析用於選擇要呼叫的使用者定義轉換。候選函數選擇如下:

  • 目標類型的轉換建構子(12.3.1)為候選函數。
  • 來源型別及其基底類別的轉換函數,產生與目標型別相容的型別是候選函數。

運算子重寫建構子

在提供的範例程式碼中,其中轉換建構函式和A類到B類定義了轉換運算符,轉換運算子優先:

class A;

class B { 
      public: 
         B(){} 
         
         B(const A&) //conversion constructor
         { 
              cout << &quot;called B's conversion constructor&quot; << endl; 
         } 
};

class A { 
      public: 
         operator B() //conversion operator
         { 
              cout << &quot;called A's conversion operator&quot; << endl; 
              return B(); 
         } 
};

這是因為,在綁定參考參數(這裡是轉換函數的隱式物件參數)時,非常量轉換函數(A&) 中的參考優先於轉換構造函數(const A&) 中的const 引用。

物件導向的哲學考量

關於哪個類別應該負責轉換物件的哲學問題,標準支援來源類別(在本例中為 A)。這符合封裝的原則,因為它允許來源類別控制轉換過程並確保結果物件(B)的正確性。

最終由開發人員自行決定決定適當的轉換機制針對具體場景,考慮封裝、抽象化、程式碼可讀性等因素。

以上是在類型之間轉換時:來源物件優先還是目標物件優先?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn