Dua Nilai pada Alamat Yang Sama: Misteri Pembolehubah Konst
Kod ini menunjukkan tingkah laku yang menarik melibatkan pembolehubah const dan alamat memori. Kod yang disediakan mengandungi integer const N yang diberikan kepada 22. Ia kemudian menggunakan const_cast untuk menukar alamat N kepada penunjuk bukan const pN dan memberikan nilai 33 kepadanya.
Apabila memeriksa output, kami amati dua nilai yang berbeza pada alamat memori yang sama. Pembolehubah N kekal tidak berubah pada 22, tetapi *pN menunjukkan nilai ubah suai 33.
Walau bagaimanapun, adalah penting untuk memahami bahawa terdapat hanya satu nilai yang disimpan pada alamat memori tersebut. Pengkompil mengambil kesempatan daripada pengoptimuman yang dibenarkan untuk pembolehubah const. Pengoptimuman ini menganggap sebarang rujukan kepada N sebagai nilai masa kompilasinya, iaitu 22. Oleh itu, walaupun pN menunjuk ke alamat memori yang sama, ia secara berkesan menunjuk kepada nilai yang dioptimumkan, menghasilkan output yang ditunjukkan.
Perlu ambil perhatian bahawa pengoptimuman pengkompil boleh melangkaui pembolehubah const. Sebagai peraturan umum, ia boleh membuat pengubahsuaian untuk meningkatkan kecekapan kod, termasuk mengalih keluar akses memori yang tidak perlu, menyusun semula arahan, dan juga mengalih keluar bahagian kod jika ia dianggap tidak relevan. Walaupun pengoptimuman ini secara amnya meningkatkan prestasi, pengoptimuman ini kadangkala boleh membawa kepada hasil yang tidak dijangka seperti contoh yang diperhatikan di sini.
Atas ialah kandungan terperinci Bagaimanakah Pembolehubah Const dan Penunjuk Bukan Const Boleh Menunjukkan Nilai Berbeza pada Alamat Memori yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!