Rumah >pembangunan bahagian belakang >C++ >Apakah Output 'cout

Apakah Output 'cout

DDD
DDDasal
2024-12-09 16:39:10866semak imbas

What is the Output of

Enigma "cout << a << a": Membongkar Tingkah Laku Tidak Ditakrifkan

Persoalan temu bual yang membingungkan baru-baru ini tercetus perbahasan: apakah output yang betul untuk pernyataan berikut?

int a = 0;
cout << a++ << a;

Beberapa calon dengan yakin memilih "01", manakala yang lain membuat alasan bahawa tingkah laku itu tidak ditentukan—jawapan yang pada mulanya mengejutkan sesetengah pihak.

Inti perkara ini terletak pada susunan penilaian dan kesan sampingan kenyataan itu. Untuk memahami perkara ini, mari kita kembangkannya ke dalam panggilan fungsi yang setara:

std::operator<<(std::operator<<(std::cout, a++), a);

C menjamin bahawa kesan sampingan penilaian sebelumnya akan dilakukan pada titik jujukan. Walau bagaimanapun, tiada titik jujukan antara penilaian hujah, menyebabkan susunan penilaian hujah tidak pasti—sama ada a boleh dinilai sebelum a atau sebaliknya.

Kekaburan dalam susunan penilaian ini menjadikan gelagat pernyataan tidak ditentukan. Walau bagaimanapun, dalam kes a dan a, hasil yang pertama digunakan sebagai hujah untuk yang terakhir, menjadikan output bergantung pada susunan penilaian.

C 17 Kemas Kini: Kejelasan Di Tengah-tengah Kekaburan

Dalam C 17, peraturan telah berkembang. Kenyataan khusus mengenai operator syif telah diperkenalkan, menetapkan bahawa penilaian dan kesan sampingan operan kiri mesti berlaku sebelum operan kanan.

In a shift operator expression E1<>E2, every value computation and side-effect of E1 is sequenced before every value computation and side effect of E2.

Melalui mandat ini, ungkapan "a

Pemurnian ini dalam semantik memastikan kejelasan dan ketekalan dalam penilaian ungkapan yang melibatkan operator anjakan, sejajar dengan amalan C idiomatik.

Atas ialah kandungan terperinci Apakah Output 'cout. 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