轉換建構子與轉換運算子:優先權
在C 中,轉換建構子和轉換運算子都可以用於在不同類別之間轉換對象,但它們在重載決策中的優先順序有時會導致意外結果。
問題1:優先權建立
在問題提供的程式碼片段中,編譯器選擇儘管有符合的轉換建構函數,但仍呼叫轉換運算子operator B()。這表示在這種情況下轉換運算子具有優先權。
根據C 標準(8.5/14),「可以從來源類型轉換為目標類型的使用者定義的轉換序列[... ] 如13.3.1.4 所述枚舉,並透過重載決策(13.3) 選擇最佳的一個。類別(在本例中為A)應該對如何執行轉換有更多的發言權。然而,在 C 中,編譯器主要考慮類型安全和效率。
轉換運算子通常更有效率,因為它可以內聯,而轉換建構子需要明確呼叫。此外,轉換運算子可以設定為 const,這允許綁定到右值,從而在某些情況下具有優勢。
選擇轉換方法之間的優先權轉換建構子與轉換運算子是由C 標準13.3.3.2/3 所描述的重載解析過程建立的。在提供的程式碼的情況下,選擇轉換運算子是因為它具有較少的 const 限定符,並且可以更有效地綁定到右邊值 A()。
一般來說,在轉換建構子和轉換運算子之間進行選擇取決於關於程式碼的特定要求。如果效率和與右值的綁定很重要,那麼轉換運算子可能是更好的選擇。但是,如果轉換邏輯很複雜或應該由目標類別控制,則轉換建構子可能更合適。
以上是轉換建構函式與轉換運算子:C 中哪一個優先?的詳細內容。更多資訊請關注PHP中文網其他相關文章!