首頁 > 後端開發 > C++ > C 11 中刪除的函數如何影響重載解析?

C 11 中刪除的函數如何影響重載解析?

Mary-Kate Olsen
發布: 2024-12-15 15:22:24
原創
377 人瀏覽過

How Do Deleted Functions in C  11 Influence Overload Resolution?

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中文網其他相關文章!

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