在C 11 中,刪除的函數不會完全刪除,而是參與重載決策。此功能有兩個主要目的。
防止隱式轉換
「= delete」語法一半的效用在於禁止呼叫者使用特定參數呼叫特定函數型別。其目標是阻止特定場景下的隱式轉換。對於要禁止的特定重載,它必須參與重載決策。
確保明確呼叫
如果「= delete」語法要完全刪除函數,它本質上相當於完全省略該聲明。這將允許以下場景:
onlydouble val(20); // Legal in C++
編譯器將考慮所有建構函式並識別隱式轉換,允許它呼叫用於雙參數的建構函式。
相反,使用「=」參與重載決策的「delete」:
onlydouble val(20); // Error in C++
編譯器會評估所有建構函數,包括已刪除的建構函數。它發現了整數文字的精確匹配,並拋出錯誤,因為它試圖呼叫已刪除的函數。
澄清“=刪除”的角色
“ =刪除”語法表示“我禁止這個”,而不僅僅是“這個不存在”。這是一個更強有力的聲明,具有特定的含義。我們不需要「這不存在」的獨特語法,因為它已經透過省略聲明來暗示。
在極少數情況下,由於缺乏明確的方法來表明該規則,可能會出現某些規則歧義。複製構造函數不存在。然而,像複製建構函式這樣的特殊建構函式是類別固有的。與其說它們不存在,不如說呼叫它們是否合法。
結論
C 11 中刪除的函數參與重載解析以方便清除錯誤報告並強制執行明確函數呼叫。這使開發人員能夠防止不明確和意外的轉換,確保程式的正確性和清晰度。
以上是為什麼 C 11 中刪除的函數會參與重載解析?的詳細內容。更多資訊請關注PHP中文網其他相關文章!