Dalam C , rujukan menyediakan mekanisme untuk mengakses data secara tidak langsung. Walau bagaimanapun, sekatan tertentu dikenakan semasa mengikat rujukan kepada lvalues (objek yang disimpan di lokasi memori). Memahami sekatan ini adalah penting untuk kod yang betul dan cekap.
Satu sekatan sedemikian timbul apabila cuba mengikat rujukan bukan nilai tetap kepada nilai jenis yang berbeza. Sebagai contoh, coretan kod berikut adalah sah:
int a; const double &m = a;
Di sini, rujukan dwi const m boleh mengikat kepada nilai int a kerana jenis data m adalah lebih luas daripada a. Walau bagaimanapun, apabila kami cuba melakukan perkara berikut:
int a; double &m = a;
Ralat berlaku: "rujukan nilai bukan const untuk menaip 'double' tidak boleh mengikat nilai jenis 'int' yang tidak berkaitan." Ralat ini berpunca daripada fakta bahawa rujukan bukan const lvalue tidak boleh terikat pada objek sementara.
Dalam coretan kod kedua, lvalue a sedang ditukar kepada jenis berganda. Penukaran ini mencipta objek sementara. Walau bagaimanapun, rujukan bukan const lvalue seperti m tidak boleh terikat pada objek sementara ini.
Sekatan ini digunakan sama rata untuk jenis yang ditentukan pengguna:
struct Foo {}; Foo &obj = Foo(); // Error: non-const reference cannot bind to temporary object
Dalam sesetengah penyusun seperti Visual Studio, ralat mungkin tidak muncul kerana sambungan pengkompil lalai. Walau bagaimanapun, penyusun yang mematuhi seperti GCC akan menimbulkan ralat ini. Oleh itu, adalah penting untuk mematuhi peraturan ini untuk memastikan ketepatan kod dan mengelakkan potensi isu.
Atas ialah kandungan terperinci Mengapa Rujukan Nilai Bukan Konst Tidak Boleh Terikat kepada Nilai L Jenis Berbeza dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!