3 回答

TA貢獻1843條經(jīng)驗 獲得超7個贊
不,C不支持任何形式的重載(除非您將內置運算符已經(jīng)重載為一種重載形式)。
printf使用稱為varargs的功能工作。您撥打的電話看起來可能過載了:
printf("%d", 12); // int overload?
printf("%s", "hi"); // char* overload?
其實不是。只有一個printf函數(shù),但是編譯器使用一種特殊的調用約定來調用它,其中您提供的任何參數(shù)都按順序放在stack [*]上。printf(或vprintf)檢查格式字符串,并使用該字符串確定如何讀回這些參數(shù)。這就是為什么printf不是類型安全的原因:
char *format = "%d";
printf(format, "hi"); // undefined behaviour, no diagnostic required.
[*]該標準實際上并沒有說它們是通過棧傳遞的,或者根本沒有提到棧,但這是自然的實現(xiàn)。

TA貢獻1805條經(jīng)驗 獲得超10個贊
這完全取決于您如何定義“支持”。
顯然,C語言在核心語言中提供了重載的運算符,因為C中的大多數(shù)運算符都具有重載的功能:您可以將,和指針類型與二進制+一起使用。intlong
然而,在同一時間C不允許你創(chuàng)建你自己的重載函數(shù)和C標準庫也有訴諸不同名稱的功能與不同類型(如使用abs,fabs,labs等)。
換句話說,C在某種程度上已將重載硬編碼到核心語言中,但是標準庫和用戶都不允許自己進行重載。
- 3 回答
- 0 關注
- 636 瀏覽
添加回答
舉報