C 為什麼不能通過函式返回值區分函式過載?

2021-07-22 14:23:41 字數 480 閱讀 2964

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

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

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

void function(void);

int function (void);

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

int x = function ();

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

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

附圖:

在C 中,為什麼建構函式不能有返回值?

1 假設有乙個類c,有如下定義 class c c int i x i private int x 如果c的建構函式可以有返回值,比如int int c x 0 那麼下列 會發生什麼事呢?c c c 此時c.x 1!很明顯,c 呼叫了c的無引數建構函式。該建構函式返回int值1。恰好c有乙個但引數建...

為什麼建構函式沒有返回值?

意見 1 我認為建構函式隱含的返回值就是this,因為建構函式是在類的物件產生時自動呼叫。建構函式被呼叫也就意味著產生了乙個物件,而this指標是與物件實體相關聯的,所以我認為它返回的就是this。舉例如下 class a a aa 此語句導致類a的建構函式a 被自動呼叫返回乙個首位址,系統就在記憶...

為什麼 HANDLE 返回值不同

如果你注意各種返回 handle 值的函式,你會發現它們有些返回 null 如 createthread 而有些則返回 invalid handle value 如 createfile 你不得不查詢文件找出每種函式在失敗時返回什麼。為什麼返回值不統一?如你所猜測,是歷史原因。這些值是用於相容16位...