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
Mary-Kate Olsenasal
2024-12-25 03:26:27717semak imbas

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

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

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!

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