首頁 > 後端開發 > C++ > C 函數重載是否只允許回傳類型有差異?

C 函數重載是否只允許回傳類型有差異?

Mary-Kate Olsen
發布: 2024-12-11 19:21:15
原創
918 人瀏覽過

Does C   Function Overloading Allow Differences Only in Return Type?

傳回型別是否包含在函式簽章中以及是否允許僅修改回傳類型的重載?

在 C 中,有一個區別函數宣告和函數實體之間。聲明可以建立功能實體或範本實體。對於非模板函數聲明,簽章包含參數類型、類別成員資訊(如果適用)和限定符。然而,對於函數模板特化,簽名也包含返回類型。

函數特化的函數簽名

標準C 規定,對於函數模板特化,簽名涉及返回類型,如第14.5.5.1 節中突出顯示的那樣。這包括模板的簽名和提供的模板參數。這符合返回類型影響函數類型的理解。

使用區分回傳類型的重載

根據標準,函數宣告不同的回傳類型在重載方面被認為是不同的(第 13.1 節)。然而,「僅因返回類型不同」的定義在語言中仍未指定。

編譯器行為

目前,主要編譯器拒絕具有相同簽章但不同的函數宣告回傳類型(例如,「int f();」、「double f();”)。然而,這種行為不一定是標準強制要求的。

C 0x 提案草案

最近的 C 0x 草案規範在第 1.3.11 節,明確包含函數實體和模板特化的返回類型。這與傳回型別構成函數型別不可分割的一部分的斷言相符。

因此,總而言之:

  • 函數特化在其簽章中包含回傳類型。
  • 非範本函數的簽章中沒有傳回型別。
  • 重載根據標準,僅禁止返回類型差異,儘管此條件的確切解釋可能因編譯器和語言版本而異。

以上是C 函數重載是否只允許回傳類型有差異?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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