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
Mary-Kate Olsenasal
2024-12-11 11:59:10692semak imbas

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

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!

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