轉換序列歧義:轉換建構子與運算子的優先權
從A 類物件初始化B 類物件時,存在歧義如果同時定義了轉換建構函數和轉換運算符,則可能會發生這種情況。這些函數之間的交互作用決定了要呼叫哪一個。
優先建立
根據C 標準(8.5/14),使用者定義的轉換序列可以從A 轉換為B 被枚舉,並通過重載決議選擇最好的一個。僅當轉換建構函式不適用時才考慮轉換運算子。
參數轉換
重載解析將轉換函數和建構子轉換為與呼叫參數相符的參數清單。對於轉換運算符,會產生隱式物件參數,從而在運算子的函數參數和來源物件之間建立綁定。
獲勝候選人
轉換運算子由於「最少 const 資格」規則而獲勝 (13.3.3.2/3)。在這種情況下,建構子 B(const A&) 有一個 const 參考作為其參數,而轉換運算子運算子 B() 有一個非常量參照。由於來源物件是右值(臨時),因此非常量引用可以綁定到它。
物件導向的視角
從物件導向的角度來看, A 的轉換運算子相對於B 的建構子的預設選擇表明來源類別(A)有責任定義轉換過程。然而,作為目標類的 B 是否應該對這種轉換承擔主要責任仍然存在爭議。
以上是轉換序列歧義:轉換運算子何時勝過建構子?的詳細內容。更多資訊請關注PHP中文網其他相關文章!