Tertib Penilaian dalam Penyata Tugasan C
Apabila memberikan nilai pada peta dalam C , susunan penilaian boleh membawa kepada hasil yang berlawanan dengan intuitif. Pertimbangkan kod berikut:
printf("%d ", mp.size());
mp[10]=mp.size();
printf("%dn", mp[10]);
Kod ini mencetak 0 dan kemudian 1, manakala seseorang mungkin menjangkakan 0 dan 0. Ini kerana:
Tingkah Laku Tidak Ditentukan
Tingkah laku tertentu ini tidak dinyatakan dalam piawaian C. Walau bagaimanapun, cadangan baru-baru ini (N4228) bertujuan untuk menjelaskan susunan penilaian dalam kes sedemikian.
Bahagian [expr.ass]p1 cadangan yang disemak menyatakan bahawa:
"Operan yang betul ialah dijujukan sebelum operan kiri."
Ini bermakna dalam contoh di atas, mp.size() akan dinilai sebelum mp[10], menghasilkan output yang dijangkakan 0 dan 0.
Kemas kini
Adalah penting untuk ambil perhatian bahawa dalam C 17, tingkah laku ini telah dinyatakan dalam standard, seperti dalam semakan 3 cadangan p0145. Operan kanan kini disusun secara eksplisit sebelum operan kiri dalam pernyataan tugasan.
Atas ialah kandungan terperinci Mengapa Menetapkan Nilai Peta dalam C Menghasilkan Keputusan Yang Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!