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

Mengapa Rujukan Nilai Bukan Konst Tidak Boleh Terikat kepada Sementara dalam C ?

Patricia Arquette
Lepaskan: 2024-12-06 14:20:13
asal
1012 orang telah melayarinya

Why Can't Non-Const Lvalue References Bind to Temporaries in C  ?

Rujukan Bukan Konst Lnilai dan Pengikatan Sementara

Dalam C , rujukan bukan const lvalue dijangka terikat pada lnilai yang sama atau jenis terbitan. Walau bagaimanapun, situasi tertentu, seperti mengikat objek sementara, boleh membawa kepada ralat.

Mengapa kod berikut sah?

int a;
const double &m = a;
Salin selepas log masuk

Dalam kes ini, rujukan terikat pada nilai l , dan kerana rujukan adalah const, lvalue tidak boleh diubah suai. Ini dibenarkan dalam C selagi jenisnya serasi.

Walau bagaimanapun, apabila cuba mengikat rujukan bukan nilai tetap kepada nilai jenis yang berbeza, ralat berlaku:

int a;
double &m = a;
Salin selepas log masuk

ralat: rujukan bukan nilai tetap untuk jenis 'double' tidak boleh terikat pada nilai jenis yang tidak berkaitan 'int'

Ralat ini ditimbulkan kerana tindakan sementara terlibat. Penukaran jenis tersirat daripada int kepada dua kali ganda mencipta objek sementara. Rujukan bukan const tidak boleh terikat pada objek sementara kerana ia memerlukan objek itu mempunyai jangka hayat dan lokasi yang diketahui. Objek sementara, mengikut sifatnya, wujud untuk tempoh terhad.

Visual Studio mungkin menyusun kod ini tanpa ralat disebabkan sambungan pengkompil yang membenarkan pengikatan kepada sementara dalam kes tertentu. Walau bagaimanapun, pengkompil seperti GCC akan membenderakan ralat ini dengan betul.

Contoh di bawah menunjukkan isu yang sama dengan jenis yang ditentukan pengguna:

struct Foo {};

Foo &obj = Foo(); // error: binding non-const reference to temporary
Salin selepas log masuk

Memahami konsep ini adalah penting untuk pengendalian rujukan yang betul dalam C dan mengelakkan isu masa jalan yang berkaitan dengan seumur hidup objek.

Atas ialah kandungan terperinci Mengapa Rujukan Nilai Bukan Konst Tidak Boleh Terikat kepada Sementara dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan