函式過載 僅根據函式返回值型別不能實現過載

2021-08-08 04:12:13 字數 558 閱讀 8228

函式的兩個要素:引數與返回值。

如果同名函式的引數不同(包括型別、順序不同),那麼容易區別出它們是不同的函式。

如果同名函式僅僅是返回值型別不同,有時可以區分,有時卻不能。例如:

void function(void);

int function (void);

上述兩個函式,第乙個沒有返回值,第二個的返回值是int 型別。如果這樣呼叫函式:

int x = function ();

則可以判斷出function 是第二個函式。問題是在c++/c 程式中,我們可以忽略函式的返回值。在這種情況下,編譯器和程式設計師都不知道哪個function 函式被呼叫。

所以只能靠引數而不能靠返回值型別的不同來區分過載函式。編譯器根據引數為每個過載函式產生不同的內部識別符號。

void function(void)

{};int function(void)

{};

注:僅僅根據函式返回值不能過載函式,僅能根據不同的形參列表,包括引數個數和型別;

僅僅根據引數返回型別編譯器會發出錯誤警告,在編譯時期就提示錯誤

C 函式返回值型別

c 語言的函式返回值型別可以分為內部型別和自定義型別兩大類。在函式返回內部型別中不能返回陣列型別但可以返回指向陣列的指標,同樣也可以返回指向函式的函式指標。如果希望返回值可以作為左值 即可以放在賦值操作符左邊的 那就必須返回引用型別。而在函式返回自定義型別 即返回類型別 中根據是否可作為左值,返回值...

函式返回值

這裡接著探求被調函式的返回值是如何傳遞到主調函式中的,下面為c程式。add函式通過直接返回a b的,而add1函式先定義乙個區域性變數c,儲存a b的值,然後再返回c的值。其中a b可以當成乙個臨時變數,其結果是暫時存放在暫存器中的 eax 參照反匯程式設計序,可以看出函式的值並不是通過壓棧 基址定...

函式返回值

一般說來,函式中是可以進行區域性變數的返回的,不然豈不是全部要用全域性變數,如果使用了全域性變數,那還有必要進行返回嗎?那函式就沒有它存在的意義了!但是要注意了,這裡所謂的區域性變數的返回很有內涵,什麼樣的值才可以進行返回而不出錯?其實,只要遵守一句話即可 函式不能返回指向棧記憶體的指標!為什麼?因...