Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah Fungsi Statik Tidak Boleh Dibebankan dengan Fungsi Bukan Statik dalam C ?

Mengapakah Fungsi Statik Tidak Boleh Dibebankan dengan Fungsi Bukan Statik dalam C ?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-27 11:12:30740semak imbas

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

Tidak Boleh Membebankan Fungsi Statik dengan Fungsi Bukan Statik dalam C

Walaupun banyak bahasa pengaturcaraan membenarkan lebihan fungsi berdasarkan kaedah statik atau contoh , C secara eksplisit melarang tingkah laku ini. Piawaian C 13.1/2 menyatakan bahawa fungsi ahli dengan nama yang sama dan jenis parameter tidak boleh dibebankan jika mana-mana daripadanya adalah statik.

<code class="cpp">class X {
    static void f();
    void f();
};</code>

Dalam contoh di atas, dua pengisytiharan f() dianggap tidak terbentuk oleh standard.

Kekaburan dalam Memanggil Fungsi Statik pada Kejadian

Walaupun lebihan fungsi dibenarkan dalam senario ini, masih terdapat kesamaran semasa memanggil fungsi statik pada contoh. C Standard 9.4/2 membenarkan ahli statik dipanggil menggunakan kedua-dua qualified-id (cth., X::f()) dan sintaks akses ahli kelas (cth., g().reschedule()). Oleh itu, dalam kod berikut, tidak jelas sama ada fungsi print() statik atau bukan statik harus dipanggil:

<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>

Menyemak jika Fungsi Dipanggil Secara Statik

Tidak seperti dalam PHP, di mana anda boleh menyemak sama ada pembolehubah ini ditakrifkan untuk menentukan sama ada fungsi dipanggil secara statik, C tidak menyediakan keupayaan ini. Kata kunci ini sentiasa menunjuk kepada objek dan tidak pernah NULL, jadi anda tidak boleh menggunakannya untuk membezakan antara panggilan statik dan contoh.

Atas ialah kandungan terperinci Mengapakah Fungsi Statik Tidak Boleh Dibebankan dengan Fungsi Bukan Statik dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn