首頁 > 後端開發 > C++ > 主體

轉換序列歧義:轉換運算子何時勝過建構子?

DDD
發布: 2024-11-12 06:17:02
原創
935 人瀏覽過

Conversion Sequence Ambiguity: When Does a Conversion Operator Trump a Constructor?

轉換序列歧義:轉換建構子與運算子的優先權

從A 類物件初始化B 類物件時,存在歧義如果同時定義了轉換建構函數和轉換運算符,則可能會發生這種情況。這些函數之間的交互作用決定了要呼叫哪一個。

優先建立

根據C 標準(8.5/14),使用者定義的轉換序列可以從A 轉換為B 被枚舉,並通過重載決議選擇最好的一個。僅當轉換建構函式不適用時才考慮轉換運算子。

參數轉換

重載解析將轉換函數和建構子轉換為與呼叫參數相符的參數清單。對於轉換運算符,會產生隱式物件參數,從而在運算子的函數參數和來源物件之間建立綁定。

獲勝候選人

轉換運算子由於「最少 const 資格」規則而獲勝 (13.3.3.2/3)。在這種情況下,建構子 B(const A&) 有一個 const 參考作為其參數,而轉換運算子運算子 B() 有一個非常量參照。由於來源物件是右值(臨時),因此非常量引用可以綁定到它。

物件導向的視角

從物件導向的角度來看, A 的轉換運算子相對於B 的建構子的預設選擇表明來源類別(A)有責任定義轉換過程。然而,作為目標類的 B 是否應該對這種轉換承擔主要責任仍然存在爭議。

以上是轉換序列歧義:轉換運算子何時勝過建構子?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板