Rumah >pembangunan bahagian belakang >C++ >Mengapakah output program C dengan pengendali pasca kenaikan yang digunakan dalam cout tidak ditentukan?

Mengapakah output program C dengan pengendali pasca kenaikan yang digunakan dalam cout tidak ditentukan?

Barbara Streisand
Barbara Streisandasal
2024-11-06 08:23:02323semak imbas

Why is the output of a C   program with post-increment operators used in cout undefined?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn