Rumah > pembangunan bahagian belakang > C++ > Mengapakah \'i = i 1\' sah dalam C 17 tetapi tingkah laku tidak ditentukan dalam C 11?

Mengapakah \'i = i 1\' sah dalam C 17 tetapi tingkah laku tidak ditentukan dalam C 11?

Mary-Kate Olsen
Lepaskan: 2024-10-27 09:53:30
asal
346 orang telah melayarinya

Why is

Menjadikan i = i 1 Sah dalam C 17

Dalam C 11, ungkapan "i = i 1" ialah tingkah laku yang tidak ditentukan kerana jaminan penjujukan yang tidak mencukupi. Walau bagaimanapun, dalam C 17, ungkapan ini menjadi undang-undang. Inilah sebabnya:

C 11

Dalam C 11, peraturan penjujukan untuk pengendali tugasan (=) menyatakan bahawa tugasan telah disusun selepas pengiraan nilai hak dan operan kiri. Walau bagaimanapun, tiada peraturan khusus wujud untuk penjujukan relatif tugasan dan kesan sampingan dalam operan yang betul. Kekurangan penjujukan ini membawa kepada tingkah laku yang tidak ditentukan dalam kes seperti "i = i 1," di mana kesan sampingan (bertambah i) dan tugasan berpotensi tidak tersusun.

C 17

C 17 memperkenalkan peraturan penjujukan baharu untuk pengendali tugasan: "Operan kanan disusun sebelum operan kiri." Ini bermakna semua kesan sampingan dan pengiraan nilai dalam operan kanan disusun sepenuhnya sebelum sebarang tindakan berlaku pada operan kiri, termasuk tugasan itu sendiri.

Kesan pada "i = i 1"

Dengan peraturan penjujukan baharu dalam C 17, ungkapan "i = i 1" menjadi sah kerana kesan sampingan penambahan i (dilakukan oleh operator postfix) kini dijamin berlaku sebelum tugasan. Oleh itu, tindakan memberikan nilai "i 1" kepada i diasingkan sepenuhnya daripada kesan sampingan, menghapuskan tingkah laku tidak ditentukan yang wujud dalam C 11.

Ringkasnya, perubahan dalam peraturan penjujukan untuk tugasan operator dalam C 17 memastikan bahawa penilaian "i = i 1" mengikut urutan tertentu, membenarkan kesan sampingan penambahan i mendahului tugasan itu sendiri, menyelesaikan tingkah laku tidak ditentukan yang wujud dalam C 11.

Atas ialah kandungan terperinci Mengapakah \'i = i 1\' sah dalam C 17 tetapi tingkah laku tidak ditentukan dalam C 11?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan