Mengapakah `i = i 1;` kini sah di C 17?

Barbara Streisand
Lepaskan: 2024-11-01 06:38:01
asal
644 orang telah melayarinya

Why is `i = i     1;` now legal in C  17?

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:

  • Pengiraan nilai operan telah disusun sebelum operasi tugasan.
  • Kesan sampingan pada pembolehubah skalar tidak berjujukan berbanding kedua-dua kesan sampingan yang lain dan pengiraan nilai.

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:

  • Operan kanan dijujukan sebelum operan kiri.

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!