Rumah >pembangunan bahagian belakang >C++ >Mengapakah Mengubah Suai Pembolehubah `const` Melalui Penunjuk Bukan Const Nampak Berfungsi, tetapi Sebenarnya Tidak Mengubah Nilainya?
Mengubah suai const Melalui Penunjuk Bukan Const
Dalam C , pembolehubah const tidak boleh diubah suai setelah dimulakan. Walau bagaimanapun, dalam senario tertentu, nampaknya pembolehubah const telah diubah. Pertimbangkan kod berikut:
<code class="cpp">const int e = 2; int* w = (int*)&e; // (1) *w = 5; // (2) cout << *w << endl; // (3) cout << e << endl; // (4)</code>
Jika anda menjalankan kod ini, anda akan melihat tingkah laku yang tidak dijangka:
5 2
Walaupun *w telah ditukar kepada 5 dalam (2), e masih mengekalkan nilai asalnya iaitu 2. Tingkah laku yang kelihatan paradoks ini berpunca daripada faktor-faktor berikut:
Akibatnya, apabila *w dinilai pada masa jalan, ia mengembalikan nilai yang diubah suai (5). Walau bagaimanapun, apabila e dinilai pada masa penyusunan, nilai asalnya (2) digunakan.
Tingkah laku ini dikenali sebagai tingkah laku tidak ditentukan dalam C . Mengubah suai pembolehubah const secara langsung atau tidak langsung membawa kepada akibat yang tidak dapat diramalkan dan berhati-hati harus dilakukan dalam situasi sedemikian.
Atas ialah kandungan terperinci Mengapakah Mengubah Suai Pembolehubah `const` Melalui Penunjuk Bukan Const Nampak Berfungsi, tetapi Sebenarnya Tidak Mengubah Nilainya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!