C 17 Menghalalkan i = i 1; Disebabkan Perintah Penilaian Operator yang Disemak
Dalam C 11, tugasan i = i 1; dianggap sebagai tingkah laku yang tidak ditentukan. Walau bagaimanapun, dalam C 17, ia menjadi ungkapan yang sah. Untuk memahami perubahan ini, kita perlu menyelidiki peraturan yang disemak untuk penilaian operator.
Kelakuan Tidak Ditakrifkan Pra-C 17
Dalam C 11, penjujukan penilaian operan untuk pengendali tugasan ditakrifkan seperti berikut:
Dalam i = i 1;, selepas kenaikan i mempamerkan kesan sampingan (mengubah suai nilai i), yang boleh berlaku berselang dengan operación tugasan. Potensi untuk kesan sampingan yang tidak berjujukan ini membawa kepada tingkah laku yang tidak ditentukan.
Peraturan Penjujukan Semakan C 17
C 17 memperkenalkan peraturan penjujukan baharu untuk pengendali tugasan:
Peraturan yang disemak ini terpakai pada kedua-dua pengiraan nilai dan kesan sampingan operan kanan.
Penghalalan daripada i = i 1;
Dalam i = i 1;, operan kanan ialah i 1. Penilaian ungkapan ini melibatkan kenaikan postfix i dalam kurungan, diikuti dengan penambahan 1 . Mengikut peraturan baharu, keseluruhan penilaian ini disusun dan diselesaikan sebelum tugasan ke i.
Oleh itu, dalam C 17, tindakan mengubah suai i (kesan sampingan) diselesaikan sebelum tugasan sebenar, menghapuskan berpotensi untuk kesan sampingan yang tidak berurutan. Urutan yang disemak ini menjadikan i = i 1; ungkapan undang-undang dalam C 17.
Atas ialah kandungan terperinci Mengapakah `i = i 1;` kini sah di C 17?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!