Rumah >pembangunan bahagian belakang >C++ >Mengapa Rujukan Nilai Bukan Konst Tidak Boleh Terikat kepada Nilai L Jenis Berbeza dalam C ?

Mengapa Rujukan Nilai Bukan Konst Tidak Boleh Terikat kepada Nilai L Jenis Berbeza dalam C ?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-25 19:23:14957semak imbas

Why Can't a Non-Const Lvalue Reference Bind to an Lvalue of a Different Type in C  ?

Ralat Pengikat Rujukan Nilai

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!

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