Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah Anda Membebankan Fungsi Statik dan Bukan Statik dalam C?

Bolehkah Anda Membebankan Fungsi Statik dan Bukan Statik dalam C?

Susan Sarandon
Susan Sarandonasal
2024-10-27 11:32:02472semak imbas

Can You Overload Static and Non-Static Functions in C  ?

Melebihkan Fungsi Statik dan Bukan Statik dalam C

Memutuskan sama ada untuk memanggil fungsi statik atau bukan statik berdasarkan sintaks panggilan boleh menjadi fungsi yang diingini. Walau bagaimanapun, dalam C , mencapai kesan ini boleh menjadi mencabar.

Piawaian C secara jelas melarang fungsi lebih muatan yang berbeza hanya dari segi pengisytiharan statik atau bukan statik. Khususnya, mana-mana fungsi ahli dengan tandatangan yang sama, termasuk varian statik vs. bukan statik, tidak boleh terlebih beban.

<code class="cpp">class Foo {
    static void print();
    void print();  // Compiler error: cannot overload with static function
};</code>

Selain itu, adalah mungkin untuk memanggil fungsi statik menggunakan sintaks ahli kelas, yang akan menimbulkan kesamaran. jika wujud berbilang fungsi dengan tandatangan yang sama.

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

int main() {
    Foo f;
    f.print();  // Ambiguous: which print function is being called?
}</code>

Untuk menentukan fungsi khusus untuk dipanggil, seseorang mungkin mempertimbangkan untuk menggunakan kata kunci ini. Walau bagaimanapun, ini sentiasa menunjuk kepada objek yang digunakan untuk fungsi tersebut, menjadikannya tidak sesuai untuk membezakan antara panggilan statik dan bukan statik.

<code class="cpp">// This keyword is always non-NULL, making it impossible to determine static vs. non-static calls.
cout << (this == nullptr ? "static" : "non-static");</code>

Kesimpulannya, manakala PHP menyediakan cara untuk membezakan antara statik dan panggilan fungsi bukan statik, C tidak mempunyai mekanisme yang setara. Fungsi statik dan bukan statik mesti mempunyai tandatangan unik atau menggunakan mekanisme tambahan untuk mencapai gelagat yang diingini.

Atas ialah kandungan terperinci Bolehkah Anda Membebankan Fungsi Statik dan 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