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!