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

Bolehkah Rujukan C Menjadi Batal?

Patricia Arquette
Lepaskan: 2024-12-14 06:36:21
asal
946 orang telah melayarinya

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;
Salin selepas log masuk

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!

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