Rumah >pembangunan bahagian belakang >C++ >Mengapa Gelung Ini Melimpah dan Menghasilkan Output Tidak Dijangka?
Mengapakah gelung ini menghasilkan "amaran: lelaran 3u memanggil gelagat tidak ditentukan" dan mengeluarkan lebih daripada 4 baris?
Kod yang dimaksudkan:
#include <iostream> int main() { for (int i = 0; i < 4; ++i) std::cout << i * 1000000000 << std::endl; }
menjana amaran berikut:
warning: iteration 3u invokes undefined behavior [-Waggressive-loop-optimizations] std::cout << i * 1000000000 << std::endl; ^
Ini amaran berpunca daripada limpahan integer bertanda yang berlaku dalam pernyataan:
i * 1000000000
Pendaraban i (jenis data int) dengan 1000000000 mengakibatkan limpahan integer kerana 1000000000 terlalu besar untuk dimuatkan dalam julat pembolehubah int. Akibatnya, nilai i menjadi tidak ditentukan dan sebarang operasi seterusnya pada i (seperti mengeluarkannya ke konsol) mungkin menghasilkan hasil yang tidak dijangka.
Dalam kes khusus ini, gelung terus berulang dan menghasilkan output melebihi yang dimaksudkan empat lelaran kerana keadaan gelung i < 4 menilai kepada benar. Walau bagaimanapun, disebabkan limpahan integer, nilai i telah rosak dan gelung terus berulang sehingga penimbal output penuh.
Untuk menyelesaikan isu ini, anda mesti sama ada melaraskan syarat penamatan gelung untuk mengambil kira limpahan atau gunakan jenis data integer yang cukup lebar untuk mengendalikan hasil pendaraban.
Atas ialah kandungan terperinci Mengapa Gelung Ini Melimpah dan Menghasilkan Output Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!