回傳型別影響函數簽章嗎?
在 C 中,沒有函數範本宣告的函數在其簽章中排除其傳回型別。禁止僅根據不同的返回類型重載函數。
詳細說明
函數及其宣告和簽章之間的關係很複雜。
宣告與實體
函數宣告可以宣告功能實體或範本實體。普通函數和函數模板的明確特化屬於第一類。主函數模板或帶有未指定參數的明確特化屬於後者。
簽名定義
根據C 標準(1.3.10),函數簽名包含以下:
但是,此定義缺少傳回類型的提及。
函數模板和回傳類型
相反,函數模板特化的簽章包括函數簽章與傳回型別(14.5.5.1).
那麼,簽名到底是什麼?
對於非範本函數,簽章不包含回傳類型。但是,對於模板特化,返回類型被合併。
重載的含義
標準禁止僅根據不同的返回類型進行重載。不過,對於什麼構成這種差異仍然不明確。
編譯器行為
由於型別不相容,主要編譯器拒絕以下程式碼:
然而,他們接受:
結論
返回類型雖然不是非模板函數簽名的一部分,但對於確定函數類型兼容性至關重要。理解這些細微差別對於有效的 C 程式設計至關重要。
以上是C 函數簽名是否包含回傳類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!