Rumah >pembangunan bahagian belakang >C++ >Bolehkah Rujukan C Menjadi Batal?

Bolehkah Rujukan C Menjadi Batal?

Patricia Arquette
Patricia Arquetteasal
2024-12-14 06:36:21951semak imbas

Can C   References Ever Be Null?

The Phantom of Null References: Are They Real?

Persoalannya timbul: bolehkah rujukan menjadi null dalam C ? Pertimbangkan coretan kod berikut:

int &nullReference = *(int*)0;

Anehnya, kedua-dua g dan clang menyusun ini tanpa amaran, walaupun dengan bendera yang ketat. Walau bagaimanapun, percubaan untuk menyahrujuk nullReference akan menimbulkan gelagat yang tidak ditentukan.

Inti perkara ini terletak pada perbezaan antara rujukan dan penunjuk. Menurut piawaian C, rujukan mesti dimulakan kepada objek atau fungsi yang sah. Rujukan nol, mengikut definisi, tidak boleh wujud dalam program yang jelas. Satu-satunya cara untuk mencipta rujukan sedemikian adalah dengan mengikatnya pada "objek" yang diperoleh dengan membatalkan rujukan penunjuk nol, yang dilarang sama sekali.

Oleh itu, walaupun pengisytiharan nullReference mungkin secara sintaksis menyerupai tugasan penunjuk nol, ia tidak benar-benar mewakili rujukan batal. Pengkompil mengiktirafnya sebagai operasi tidak sah dan menetapkan lokasi memori rawak.

Salah tanggapan ini berpunca daripada menganggap rujukan seperti penunjuk. Penunjuk boleh diberikan nilai nol, menunjukkan lokasi yang tidak ditentukan. Rujukan, walau bagaimanapun, mesti sentiasa menunjuk kepada entiti yang sah. Percubaan untuk mencipta atau mengakses rujukan batal adalah usaha yang sia-sia dalam C , kerana ia bertentangan dengan prinsip asas tingkah laku rujukan.

Atas ialah kandungan terperinci Bolehkah Rujukan C Menjadi Batal?. 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