Rumah >pembangunan bahagian belakang >C++ >Adakah `cout
Menyingkap Enigma "cout << a << a": Kelakuan Tidak Ditakrifkan atau 01 Yang Ditakdirkan?
Dalam temu bual baru-baru ini, teka-teki pengekodan yang membingungkan muncul:
int a = 0; cout << a++ << a;
Dengan pilihan yang menarik untuk dipilih, termasuk 10, 01, dan "tingkah laku yang tidak ditentukan" misteri, orang yang ditemuduga memilih 01 dengan yakin, memetik pemahaman mereka tentang titik jujukan. Walau bagaimanapun, jawapan penemuduga disambut dengan hairan: jawapan yang betul adalah, menghairankan, tidak ditentukan.
Meneroka Wilayah Tidak Ditakrifkan
Mata jujukan biasanya menjamin penyelesaian kesan sampingan sebelum ini. beralih kepada penilaian seterusnya. Menariknya, pernyataan yang dipersoalkan tidak mempunyai sebarang titik urutan antara penilaian hujah. Ini bermakna hujah "a" boleh dikira sebelum atau selepas hujah "cout << a ." Kekaburan ini menyebabkan keputusan tidak dapat diramalkan, justeru menganggap tingkah laku yang tidak ditentukan.
A Ray of Hope dalam C 17
Lanskap pengekodan telah diubah dalam C 17, di mana peraturan yang mengawal penilaian ekspresi telah disemak. Garis panduan terkini secara jelas menetapkan bahawa dalam ungkapan operator shift, semua pengiraan dan kesan sampingan argumen pertama ("E1") disusun sebelum argumen kedua ("E2").
Pelarasan penting ini mewajibkan coretan kod yang dipersoalkan kepada output 01. Tingkah laku yang tidak ditentukan yang sukar difahami telah dilenyapkan, digantikan dengan kepastian yang telah ditetapkan hasil.
Selam Lebih Dalam ke dalam Bara P0145R3
Bagi mereka yang mencari pemahaman yang lebih komprehensif, kertas teknikal P0145R3: Perintah Penilaian Ungkapan Penapisan untuk Idiomatik C mendalami perincian rumit susunan penilaian ungkapan yang disemak, memberikan gambaran mendalam tentang evolusi C paradigma pengekodan.
Atas ialah kandungan terperinci Adakah `cout. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!