Rumah > pembangunan bahagian belakang > C++ > Mengapa Saya Tidak Boleh Menggunakan Rujukan Bukan Const untuk Mengikat Objek Sementara dalam C ?

Mengapa Saya Tidak Boleh Menggunakan Rujukan Bukan Const untuk Mengikat Objek Sementara dalam C ?

Mary-Kate Olsen
Lepaskan: 2024-12-25 03:26:27
asal
712 orang telah melayarinya

Why Can't I Use a Non-Const Reference to Bind a Temporary Object in C  ?

Mengapa tidak Rujukan Bukan Konst kepada Objek Sementara?

Dalam C , objek sementara yang dicipta semasa ungkapan hanya boleh diberikan kepada rujukan const, tetapi bukan bukan const rujukan. Ini telah menimbulkan persoalan tentang rasional di sebalik sekatan ini.

Penjelasan konvensional adalah berdasarkan potensi bahaya mengubah suai objek sementara. Jika rujukan bukan const kepada sementara dibenarkan, ia boleh diubah suai secara tidak sengaja, yang membawa kepada akibat yang tidak dapat diramalkan. Walau bagaimanapun, pengkritik berpendapat bahawa membaca daripada objek sementara adalah sama berisiko dan juga harus dihadkan.

Untuk memahami perbezaan ini, pertimbangkan contoh berikut:

String& a = String("test");         // Error
const String& a = String("test");   // Ok
Salin selepas log masuk

Baris pertama ialah ralat, manakala baris kedua adalah sah. Ini menunjukkan bahawa C tidak mengambil berat dengan membaca daripada objek sementara. Jadi, mengapakah penulisan dilarang?

Jawapannya terletak pada aspek asas C : parameter fungsi. Jika rujukan bukan const kepada sementara dibenarkan, ia akan mewujudkan kesamaran apabila menghantar objek sementara kepada fungsi yang menerima rujukan. Contohnya:

void inc(double& x)
{
    x += 0.1;
}

int i = 0;
inc(i);
Salin selepas log masuk

Dalam contoh ini, apabila i diserahkan kepada inc(), adalah tidak jelas sama ada rujukan kepada i dimaksudkan atau jika salinan sementara i harus dibuat. Kekaburan ini boleh membawa kepada ralat halus.

Dengan melarang rujukan bukan const kepada sementara, C memastikan bahawa parameter fungsi sentiasa merujuk kepada lnilai (objek bukan sementara). Ini menghapuskan potensi kekeliruan dan menggalakkan kejelasan kod.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan Rujukan Bukan Const untuk Mengikat Objek 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