Rumah > Artikel > pembangunan bahagian belakang > Mengapa Pengubahsuaian Pemalar melalui Penunjuk Bukan Konst Menghasilkan Gelagat Tidak Ditakrifkan?
Mengubah suai Pemalar melalui Penunjuk Bukan Pemalar: Menyelidiki Gelagat Tidak Ditakrifkan
Dalam coretan kod yang disediakan, anda menyatakan kekeliruan mengenai tingkah laku mengubah suai integer malar (e) melalui penuding bukan const (w):
<code class="cpp">const int e = 2; int* w = (int*) &e; // Casting to remove const-ness *w = 5; // Modifying the value pointed to by w</code>
Selepas membuat pengubahsuaian ini, anda perhatikan bahawa:
Anda notis selanjutnya bahawa alamat yang ditunjuk oleh w adalah sama dengan alamat e (cout << "w = " << w << endl ;cout << "&e = " << Ini membawa anda untuk mempersoalkan bagaimana e kekal tidak berubah walaupun pengubahsuaian dibuat melalui w.
Tingkah laku ini berpunca daripada tingkah laku tidak ditentukan yang timbul apabila mengubah suai pemalar melalui bukan -const penunjuk. Sebaik sahaja anda membuat pengubahsuaian sedemikian, kod tersebut memasuki wilayah gelagat yang tidak ditentukan, di mana ia menjadi tidak dapat diramalkan dan bergantung pada butiran pelaksanaan tertentu.
Dalam kes ini, nampaknya pengubahsuaian melalui w mempengaruhi salinan sementara e pada masa jalan, manakala e asal kekal tidak berubah. Sebabnya ialah e dianggap sebagai pemalar masa kompilasi dan nilainya dikodkan keras ke dalam kod binari. Oleh itu, sebarang pengubahsuaian masa jalan kepada w tidak akan menjejaskan e asal.
Tingkah laku ini khusus untuk pelaksanaan yang digunakan dan tidak boleh dipercayai. Mengubah suai data tetap melalui penunjuk bukan const dianggap sebagai amalan buruk dan harus dielakkan. Pendekatan yang betul ialah menggunakan rujukan bukan const atau mencipta salinan bukan const bagi data yang anda ingin ubah suai.
Atas ialah kandungan terperinci Mengapa Pengubahsuaian Pemalar melalui Penunjuk Bukan Konst Menghasilkan Gelagat Tidak Ditakrifkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!