Rumah >pembangunan bahagian belakang >C++ >Mengapakah output program C dengan pengendali pasca kenaikan yang digunakan dalam cout tidak ditentukan?
Kelakuan Tidak Ditakrifkan Pasca Kenaikan dalam C
Dalam C , pengendali pasca-kenaikan (i ) meningkatkan nilai pembolehubah sebanyak 1 selepas penilaiannya. Apabila digunakan dalam kombinasi dengan operator sisipan (<<) dalam cout, susunan operasi menjadi penting.
Program 1
Pertimbangkan coretan kod berikut:
<code class="cpp">#include <iostream> using namespace std; main(){ int i = 5; cout << i++ << i-- << ++i << --i << i << endl; }</p> <p>Output program ini tidak ditentukan. Menurut piawaian C, apabila kesan sampingan pada objek skalar (seperti i) tidak berjujukan berbanding dengan kesan sampingan atau pengiraan nilai yang lain menggunakan objek yang sama, tingkah laku itu tidak ditentukan.</p> <p><strong>Penjelasan: </strong></p> <p>Ungkapan cout << i << i-- << i << --i << i bersamaan dengan urutan operasi berikut:</p> <ol> <li>i : kenaikan i kepada 6 dan kembalikan 5.</li> <li>i--: pengurangan i kepada 5.</li> <li> i: kenaikan i kepada 6.</li> <li>--i: penurunan i kepada 5.</li> <li>i: pulangan 5.</li> </ol> <p>Walau bagaimanapun, piawaian tidak mentakrifkan susunan kesan sampingan ini berlaku. Ini bermakna pengkompil boleh melaksanakannya dalam sebarang susunan, yang berpotensi menghasilkan output yang berbeza setiap kali program dijalankan. Dalam kes khusus ini, output ialah "55555" kerana kesan sampingan dilaksanakan mengikut susunan yang disenaraikan di atas.</p> <p><strong>Program 2</strong></p> <p>Atur cara berikut juga menunjukkan tingkah laku yang tidak ditentukan :</p> <pre class="brush:php;toolbar:false"><code class="cpp">int x = 20, y = 35; x = y++ + y + x++ + y++; cout << x << endl << y;</code>
Output yang dijangkakan bagi program ini ialah 126 dan 37. Walau bagaimanapun, disebabkan tingkah laku yang tidak ditentukan, output sebenar boleh berbeza-beza bergantung pada pelaksanaan pengkompil.
Moral of the Story:
Adalah penting untuk mengelak daripada menggunakan selepas kenaikan dalam kombinasi dengan cout atau sebarang operasi lain yang bergantung pada kesan sampingan kenaikan. Sebaliknya, gunakan garisan berasingan untuk mengubah suai dan mencetak pembolehubah untuk memastikan gelagat boleh diramal.
Atas ialah kandungan terperinci Mengapakah output program C dengan pengendali pasca kenaikan yang digunakan dalam cout tidak ditentukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!