首頁 > 後端開發 > C++ > 主體

為什麼 C 中靜態函數不能用非靜態函數重載?

Mary-Kate Olsen
發布: 2024-10-27 11:12:30
原創
819 人瀏覽過

Why Can't Static Functions Be Overloaded with Non-Static Functions in C  ?

無法用C 中的非靜態函數重載靜態函數

雖然許多程式語言允許基於靜態或實例方法重載函數, C明確禁止這種行為。 C 標準 13.1/2 規定,具有相同名稱和參數類型的成員函數如果其中任何一個是靜態的,則不能重載。

<code class="cpp">class X {
    static void f();
    void f();
};</code>
登入後複製

在上面的範例中,考慮了 f() 的兩個聲明標準格式不正確。

在實例上呼叫靜態函數時存在歧義

即使在這種情況下允許函數重載,在呼叫實例上的靜態函數。 C 標準 9.4/2 允許使用限定 ID(例如 X::f())和類別成員存取語法(例如 g().reschedule())來呼叫靜態成員。因此,在下面的程式碼中,不清楚應該呼叫靜態或非靜態print() 函數:

<code class="cpp">class Foo {
    void print() { cout << "nonstatic" << endl; }
    static void print() { cout << "static" << endl; }
};

Foo f;
f.print(); // Ambiguous: static or non-static?</code>
登入後複製

檢查函數是否被靜態呼叫

與PHP不同,在PHP 中你可以檢查是否定義了this 變數來確定函數是否被靜態調用,而C 不提供此功能。 this 關鍵字始終指向一個對象,並且永遠不會為 NULL,因此您不能使用它來區分靜態呼叫和實例呼叫。

以上是為什麼 C 中靜態函數不能用非靜態函數重載?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板