Rumah >pembangunan bahagian belakang >C++ >Mengapa Tatasusunan Rujukan Dilarang dalam C ?

Mengapa Tatasusunan Rujukan Dilarang dalam C ?

Patricia Arquette
Patricia Arquetteasal
2024-12-05 14:21:10423semak imbas

Why Are Arrays of References Prohibited in C  ?

Susun Rujukan dan Piawaian C

Dalam C , percubaan untuk mengisytiharkan tatasusunan rujukan, seperti dalam coretan kod berikut, akan mengakibatkan ralat penyusunan:

int a = 1, b = 2, c = 3;
int& arr[] = {a,b,c,8};

Ini dilarang secara jelas oleh C Standard, yang menyatakan dalam §8.3.2/4 bahawa "Tidak boleh ada rujukan kepada rujukan, tiada tatasusunan rujukan, dan tiada penunjuk kepada rujukan."

Mengapa Susunan Rujukan Haram?

Sebab larangan ini terletak pada sifat rujukan. Tidak seperti objek, yang menduduki memori dan mempunyai alamat, rujukan adalah alias untuk objek lain. Mereka tidak mempunyai kewujudan bebas dan tidak menguasai ingatan sendiri.

Maka, pelbagai rujukan akan menjadi pelbagai penunjuk kepada objek, yang boleh membawa kepada kekeliruan dan masalah pengurusan memori yang berpotensi. Contohnya, jika objek yang ditunjuk oleh rujukan akan dipadamkan, rujukan akan menjadi berjuntai dan tatasusunan boleh mengandungi data yang tidak sah.

Simulasi Tatasusunan Rujukan

Walaupun mencipta tatasusunan rujukan sebenar tidak dibenarkan dalam C , terdapat cara untuk mensimulasikan tingkah laku mereka menggunakan teknik lain. Satu pendekatan biasa ialah menggunakan kelas yang mengandungi pembolehubah ahli rujukan, seperti yang ditunjukkan dalam kod berikut:

struct cintref
{
    cintref(const int &ref) : ref(ref) {}
    operator const int &() { return ref; }
private:
    const int &ref;
    void operator=(const cintref &);
};

int main() 
{
  int a=1,b=2,c=3;
  cintref arr[] = {a,b,c,8};
}

Ini membolehkan kami mencipta tatasusunan objek yang setiap satu mengandungi rujukan kepada pembolehubah integer. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa ini bukan tatasusunan rujukan yang sebenar melainkan tatasusunan objek yang menyimpan rujukan.

Atas ialah kandungan terperinci Mengapa Tatasusunan Rujukan Dilarang 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