Rumah > pembangunan bahagian belakang > C++ > Mengapa Saya Tidak Boleh Mencipta Rujukan Bukan Const kepada Objek Sementara dalam C ?

Mengapa Saya Tidak Boleh Mencipta Rujukan Bukan Const kepada Objek Sementara dalam C ?

Mary-Kate Olsen
Lepaskan: 2024-12-11 11:59:10
asal
697 orang telah melayarinya

Why Can't I Create Non-Const References to Temporary Objects in C  ?

Memahami Sekatan Rujukan kepada Objek Sementara

Dalam C , larangan rujukan bukan const kepada objek sementara telah mencetuskan spekulasi mengenainya rasional. Walaupun penjelasan biasa menyebut bahaya yang berkaitan dengan mengubah suai objek sementara, pemeriksaan yang lebih bernuansa diperlukan.

Pertimbangkan contoh berikut:

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

Tugasan ini menimbulkan ralat, menghalang penciptaan bukan -const rujukan kepada objek sementara. Sebaliknya, memperuntukkan objek sementara kepada rujukan const dibenarkan:

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

Rasional di sebalik sekatan ini terletak pada kemungkinan perangkap untuk mengubah suai parameter fungsi. Katakan rujukan kepada sementara dibenarkan:

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

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

Dalam senario ini, mengubah suai parameter fungsi x tidak akan mencerminkan nilai sebenar i. Tingkah laku yang tidak dijangka ini boleh membawa kepada ralat halus dan dihalang dengan melarang rujukan bukan const kepada sementara.

Walau bagaimanapun, penjelasan ini menimbulkan persoalan: mengapa membenarkan membaca daripada objek sementara sambil mengehadkan penulisan kepada mereka? Jika objek sementara dibuang selepas penyataan, tidakkah menyekat akses baca juga masuk akal untuk mengurangkan masalah yang mungkin timbul?

Jawapannya terletak pada batasan teknikal pengkompil. Apabila menghantar objek sementara mengikut nilai, salinan mesti dibuat sebelum memanggil fungsi tersebut. Untuk parameter rujukan, proses penyalinan ini tidak diperlukan; sebaliknya, rujukan terikat secara langsung pada objek sementara dalam ingatan. Membenarkan akses baca kepada objek sementara membolehkan teknik ini dimanfaatkan untuk kecekapan.

Oleh itu, semasa mengubah suai objek sementara adalah dilarang kerana kemungkinan ralat dalam parameter fungsi, membenarkan akses baca daripada rujukan kepada objek tersebut memberikan faedah prestasi tanpa memperkenalkan risiko yang ketara.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Mencipta Rujukan Bukan Const kepada 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