Rumah >pembangunan bahagian belakang >C++ >Bolehkah Fungsi C Dibebankan hanya berdasarkan Konstitas Jenis Nilai Bukan Penunjuk, Bukan Rujukan?
Lebih Muatan Fungsi dan Argumen Konst: Pandangan Lebih Dekat
Dalam C , lebihan fungsi membenarkan berbilang fungsi dengan nama yang sama wujud dalam kelas , selagi ia berbeza dalam jenis parameternya. Walau bagaimanapun, situasi timbul apabila cuba memuatkan fungsi secara berlebihan berdasarkan semata-mata pada keteguhan jenis nilai bukan penuding dan bukan rujukan.
Pertimbangkan coretan kod berikut:
#include <iostream> using namespace std; class Test { public: int foo(const int) const; int foo(int); }; int main () { Test obj; Test const obj1; int variable=0; obj.foo(3); // Call the const function obj.foo(variable); // Want to make it call the non const function }
Dalam perkara di atas kod, percubaan dibuat untuk membebankan fungsi foo berdasarkan keteguhan hujah. Walau bagaimanapun, pengkompil melemparkan ralat, menunjukkan bahawa lebihan fungsi tidak boleh dilakukan dengan cara ini.
Memahami Had
Sebab pengehadan ini terletak pada nilai cara jenis dikendalikan. Apabila nilai dihantar mengikut nilai kepada fungsi, salinan nilai dibuat dan sebarang perubahan yang dibuat pada salinan ini dalam fungsi tidak menjejaskan nilai asal. Oleh itu, constness hujah hanya relevan dalam skop fungsi.
Contohnya, dalam fungsi foo:
int Test::foo(int a) { cout << "NON CONST" << endl; a++; return a; }
Walaupun fungsi itu tidak mempunyai kata kunci const , nilai a tidak boleh diubah suai kerana ia adalah salinan nilai asal yang dihantar ke fungsi.
Penyelesaian
Untuk mencapai fungsi yang diingini, seseorang boleh membebankan fungsi foo berdasarkan jenis parameter yang berbeza. Sebagai contoh, seseorang boleh membebankan foo untuk menerima rujukan const kepada int dan rujukan bukan const kepada int.
#include <iostream> using namespace std; class Test { public: int foo(const int &a) const; int foo(int &a); }; int main() { Test obj; Test const obj1; int variable = 0; obj.foo(3); // Call the const function obj.foo(variable); // Call the non-const function }
Pendekatan ini membolehkan lebihan beban berdasarkan jenis parameter sambil mengekalkan tingkah laku yang diingini berkenaan dengan const-correctness.
Atas ialah kandungan terperinci Bolehkah Fungsi C Dibebankan hanya berdasarkan Konstitas Jenis Nilai Bukan Penunjuk, Bukan Rujukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!