Output tidak ditentukan bagi cout << a << a
Dalam coretan kod:
int a = 0; cout << a++ << a;
biasanya diandaikan bahawa tingkah laku itu bersamaan dengan:
cout << (a++) << a;
Walau bagaimanapun, disebabkan kekurangan daripada titik urutan antara penilaian hujah fungsi, susunan pelaksanaan tidak dijamin. Pengkompil boleh menilai sebelum atau selepas std::operator<<<>(std::cout, a ).
Oleh itu, tafsiran yang betul ialah:
cout << ((a++) << a);
Ini bermakna keputusannya tidak ditentukan, kerana nilai a selepas kenaikan digunakan dalam detik panggilan kepada operator<<<>.
C 17 Pindaan
Dalam C 17, peraturan telah diubah suai supaya:
E1 << E2
dinilai sebagai:
std::operator<<<>(std::operator<<<>(E1, E2), E3)
dengan semua kesan sampingan E1 disusun sebelum E2. Ini memastikan bahawa serpihan kod kini menghasilkan output "01" yang dijangkakan.
Atas ialah kandungan terperinci Mengapakah Output `cout. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!