使用stdarg.h我們可以使用可變數量的參數進行函數調用。這也被歸類爲函數重載?傳遞可變數量的參數特徵 - 函數重載?
回答
通常情況下,函數重載意味着根據給定的參數調用函數/方法的不同實例。使用C中的可變參數,不管參數列表如何,都會調用相同的函數。基於此,答案將是「否」。函數本身當然可以模仿重載的行爲(如果是1個參數,那麼做A,如果是2個參數,則做B),但它通常不會被稱爲「重載」。
真的,答案可能是「是」或「否」,具體取決於您對「函數重載」的定義。
從編譯器的角度來看,只有一個函數被實例化。從用戶的持續性來看,你可能會調用這個「重載」,但它不是由語言或編譯器來強制執行的。
如果您指的是實現,編譯器不會創建重載。變量參數函數使用va_start/va_arg/va_end來獲取它們的參數。
答案是直的,因爲C沒有按原樣實現函數重載。它可能允許你改變一個或兩個參數,但是內部發生的並不是函數重載的實際機制。
當一個重載的函數被調用時,C++編譯器通過檢查在該呼叫的 參數的數量,類型和順序選擇 正常功能。函數重載通常用於創建幾個執行類似任務但具有不同數據類型的名稱相同的函數。
我真的不明白你的問題,但在一般的函數重載取決於參數的差異。
該方法的參數。
公衆詮釋加載(INT A,INT B)
公共浮添加(浮起,浮子B)
這是函數重載。至少有一個參數必須改變才能重載該函數。這在c的早期版本中是不可能的,因爲它們不會通過傳遞參數的類型來識別函數。
不,這不是函數重載的例子。
真正的重載意味着你有幾個不同的函數具有相同的名稱,但通過它們的參數列表進行區分。根據您傳遞的參數,將調用不同的函數實例。
Overloading表示有多個合同綁定到同一個名稱。 例如:
int a(int i1, int i2);
int a(char c);
int a();
這不會在存在C作爲符號必須是相同的範圍內是唯一的,但該存在於C++。
因此,即使它可以被稱爲幾種方法,使用不同的參數類型和數量,該
功能int a(int i, ...);
不能被看作是用C超載因爲只有一個合同,這是「給我想要的參數和我會找到一種方法來處理它們「。
但是該功能可以在這樣的情況下被視爲在C++中重載:
int a(int i, ...);
int a();
號
重載意味着不同的功能將被調用取決於數量和/或類型(s)的參數(一些語言也可以使用返回類型)。但在這種情況下,無論參數的數量多少,您都可以調用相同的函數。
這比func(42)
與func(43)
沒有更多的超載。
請注意,C99的確有一些的行爲很像超載的狹義形式。如果您有#include <tgmath.h>
,則sqrt(x)
將調用三種不同功能(sqrtf()
,sqrt()
或sqrtl
())中的一種,具體取決於x
的類型。但這實際上是一個「類型通用宏」「,而不是一個重載函數。 C11添加了_Generic
關鍵字,使該設施可供用戶編寫的代碼使用。但這與OP的問題無關。
- 1. 問題傳遞一個數組變量參數特徵參數
- 2. 可以將可變數量的參數傳遞給函數嗎?
- 3. 傳遞變量參數的函數
- 4. 傳遞可變數量的參數
- 5. .Net - 傳遞可變數量的參數
- 6. 傳遞變量類型,函數參數
- 7. 通過函數參數傳遞變量
- 8. 傳遞可變數量的參數的構造函數
- 9. 具有可變數量參數的遞歸函數 - 如何傳遞左參數?
- 10. Spark Java:將可變數量的參數傳遞給函數
- 11. C++將可變數量的參數傳遞給一個函數
- 12. 如何將可變數量的參數傳遞給sprintf()函數?
- 13. 如何可變數量的參數傳遞給函數在PHP
- 14. 變量參數和函數重載
- 15. 傳遞函數參數變量,通過從PHP jQuery的負載
- 16. 函數重載 - 傳遞恆定VS傳遞變量C++
- 17. 參數傳遞,但變量的參數
- 18. 傳遞給函數的參數數量?
- 19. 傳遞給模板函數的可變參數模板參數
- 20. 將一個函數(可變參數數量!)作爲參數傳遞
- 21. 將函數作爲參數傳遞給變量 - 可能嗎?
- 22. 動態地將參數傳遞給可變參數函數
- 23. 如何將可變參數傳遞給接受可變參數的函數?
- 24. 傳遞重載函數指針作爲參數重載模板函數
- 25. 如何將所有可變數量的參數傳遞給接受可變數量參數的另一個函數?接受參數的個數的變量#
- 26. 傳遞變量參數在C++可變參數模板
- 27. 將特徵向量傳遞給sklearn的Logistic迴歸函數
- 28. 從函數到函數傳遞變量
- 29. 傳遞數組中的變量作爲函數參數?
- 30. jquery函數傳遞變量
這個分類對你有什麼好處? – cnicutar
我認爲這純粹是「超載」意味着什麼的問題。我個人不會稱這種重載,但它**可能**實現一個醜陋的版本在C中使用預處理器與可變宏和可怕的黑客來測試參數的類型... –