Kehilangan output std::cout yang tidak dapat dijelaskan boleh dikesan kembali kepada punca yang luar biasa: lulus penunjuk nol kepada fungsi. Coretan kod yang disediakan menunjukkan gelagat ini:
const char* some_string = a_function_that_returns_null(); if (some_string == 0) std::cout << "Let's check the value of some_string: " << some_string << std::endl;
Dalam coretan ini, jika fungsi a_function_that_returns_null() mengembalikan penuding nol, yang diwakili sebagai 0, gelagat std::cout berubah. Panggilan seterusnya ke std::cout, termasuk yang selepas pernyataan bersyarat, tidak akan menghasilkan sebarang output.
Punca kelakuan ini terletak pada takrifan operator<< fungsi untuk penunjuk nol. Mengikut piawaian C, pengendali<< fungsi memerlukan hujah kedua, rentetan untuk dicetak, menjadi penunjuk bukan nol. Percubaan untuk menstrim penuding nol menghasilkan gelagat yang tidak ditentukan.
Tingkah laku yang tidak ditentukan ini boleh nyata dalam pelbagai cara. Dalam sesetengah kes, ia boleh menyebabkan ranap program atau kesalahan pembahagian. Walau bagaimanapun, dalam kes lain, ia mungkin membawa kepada tingkah laku yang tidak dijangka, seperti kehilangan output std::cout.
Oleh itu, untuk mengelakkan isu sedemikian, adalah penting untuk memastikan bahawa rentetan atau penunjuk yang sah dihantar kepada std::cout. Rentetan kosong boleh digunakan sebagai ganti penunjuk nol untuk mewakili nilai kosong. Selain itu, menggunakan std::string dan bukannya rentetan gaya C boleh membantu mencegah jenis ralat ini.
Atas ialah kandungan terperinci Mengapakah std::cout Berhenti Keluaran Selepas Penunjuk Null Dilalui?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!