Rumah >pembangunan bahagian belakang >C++ >Mengapakah mengubah suai nilai `const` melalui penuding bukan const membawa kepada tingkah laku yang tidak ditentukan tetapi masih mencetak nilai yang berbeza untuk penunjuk dan pembolehubah asal?
Mengubah suai const melalui Penunjuk Bukan const
Pertimbangkan kod berikut:
<code class="cpp">const int e = 2; int* w = (int*) &e; // (1) cast to remove const-ness *w = 5; // (2) cout << *w << endl; // (3) outputs 5 cout << e << endl; // (4) outputs 2 cout << "w = " << w << endl; // (5) w points to the address of e cout << "&e = " << &e << endl;</code>
Dalam (1 ), w menunjuk ke alamat e. Dalam (2), nilai itu ditukar kepada 5. Walau bagaimanapun, apabila nilai *w dan e dipaparkan, nilainya berbeza. Tetapi jika anda mencetak penunjuk w dan alamat e, ia mempunyai nilai yang sama.
Kenapa e masih mengandungi 2, walaupun ia ditukar kepada 5? Adakah mereka disimpan di lokasi yang berasingan? Atau sementara? Tetapi bagaimanakah nilai yang ditunjukkan oleh w masih merupakan alamat e?
Jawapan
Setelah anda mengubah suai nilai const, anda memasuki wilayah tingkah laku yang tidak ditentukan. Walau bagaimanapun, untuk membuat spekulasi:
Atas ialah kandungan terperinci Mengapakah mengubah suai nilai `const` melalui penuding bukan const membawa kepada tingkah laku yang tidak ditentukan tetapi masih mencetak nilai yang berbeza untuk penunjuk dan pembolehubah asal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!