Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah Fungsi C Dibebankan hanya berdasarkan Konstitas Jenis Nilai Bukan Penunjuk, Bukan Rujukan?

Bolehkah Fungsi C Dibebankan hanya berdasarkan Konstitas Jenis Nilai Bukan Penunjuk, Bukan Rujukan?

DDD
DDDasal
2024-11-17 03:35:03311semak imbas

Can C   Functions be Overloaded based solely on the Constness of Non-Pointer, Non-Reference Value Types?

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!

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