C 11 中已刪除函數的重載解析
C 11 允許使用 = delete 語法標記函數為「已刪除」。 「此語法阻止編譯器產生函數體並禁止其直接呼叫。但是,這些刪除的函數仍然參與重載決策,該過程根據給定的一組輸入參數確定要調用的最合適的函數。
此功能為何有用?會被隱藏而不是從程式碼中完全刪除?以下範例:
如果delete 完全刪除了該函數,則它實際上會使= delete 語法等效於:struct onlydouble { onlydouble(std::intmax_t) = delete; onlydouble(double); };透過此更改,以下程式碼將合法:
struct onlydouble2 { onlydouble2(double); };編譯器會在呼叫採用a 的建構子之前嘗試將整數文字20隱式轉換為雙精度數double.
onlydouble2 val(20);
相較之下,在刪除建構子的原始範例中,編譯器將偵測函數參數(std::intmax_t) 和參數(20) 之間的精確匹配。語法可以更好地控制根據參數類型呼叫哪些函數。規範中不是必需的,因為:
存在特殊語法刪除函數(「我禁止這個」)隱式定義的函數(例如複製建構子)存在於默認重載解析透過辨識不符或歧義來處理函數「存在」以上是C 11 中刪除的函數如何影響重載解析?的詳細內容。更多資訊請關注PHP中文網其他相關文章!