Konst Peringkat Atas Tidak Mempengaruhi Tandatangan Fungsi
Dalam C , senarai paramater fungsi menentukan tandatangan fungsi, tidak kira sama ada parameter diisytiharkan dengan const peringkat atas. Ini bermakna bahawa dua fungsi dengan jenis parameter yang sama, tetapi kelayakan const berbeza, akan mempunyai tandatangan fungsi yang sama.
int f(int); // can modify parameter int f(const int); // cannot modify parameter
Tingkah laku ini mungkin kelihatan berlawanan dengan intuisi, kerana kelayakan const harus mempengaruhi secara logik cara fungsi boleh mengemas kini parameternya. Walau bagaimanapun, perspektif pemanggil ialah perkara yang penting:
Oleh itu, dari perspektif pemanggil, tandatangan fungsi adalah sama tanpa mengira kelayakan const pada parameter. Untuk menyediakan kefungsian yang berbeza, bentuk lebihan yang sesuai mesti digunakan, seperti:
void f(const int&); // pass by const reference void f(int&); // pass by non-const reference
Dalam sesetengah senario, adalah wajar untuk mencipta salinan parameter untuk mengekalkan ketekalan. Ini boleh dicapai dengan menghantar parameter mengikut nilai:
T f(const F&); // pass by const reference T& f(F&); // pass by non-const reference
Walau bagaimanapun, mencipta salinan parameter boleh memperkenalkan overhed prestasi atau rujukan memori tidak sah jika pemanggil bertujuan untuk menghantar objek sementara. Oleh itu, C tidak membuat salinan secara automatik untuk parameter const peringkat atas.
Atas ialah kandungan terperinci Adakah Tandatangan Fungsi Impak Kontra Peringkat Atas dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!