傳回型別是否包含在函式簽章中以及是否允許僅修改回傳類型的重載?
在 C 中,有一個區別函數宣告和函數實體之間。聲明可以建立功能實體或範本實體。對於非模板函數聲明,簽章包含參數類型、類別成員資訊(如果適用)和限定符。然而,對於函數模板特化,簽名也包含返回類型。
函數特化的函數簽名
標準C 規定,對於函數模板特化,簽名涉及返回類型,如第14.5.5.1 節中突出顯示的那樣。這包括模板的簽名和提供的模板參數。這符合返回類型影響函數類型的理解。
使用區分回傳類型的重載
根據標準,函數宣告不同的回傳類型在重載方面被認為是不同的(第 13.1 節)。然而,「僅因返回類型不同」的定義在語言中仍未指定。
編譯器行為
目前,主要編譯器拒絕具有相同簽章但不同的函數宣告回傳類型(例如,「int f();」、「double f();”)。然而,這種行為不一定是標準強制要求的。
C 0x 提案草案
最近的 C 0x 草案規範在第 1.3.11 節,明確包含函數實體和模板特化的返回類型。這與傳回型別構成函數型別不可分割的一部分的斷言相符。
因此,總而言之:
以上是C 函數重載是否只允許回傳類型有差異?的詳細內容。更多資訊請關注PHP中文網其他相關文章!