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
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
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);
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!