Rumah > pembangunan bahagian belakang > C++ > Mengapakah \'i = i 1;\' Menjadi Operasi yang Sah dalam C 17?

Mengapakah \'i = i 1;\' Menjadi Operasi yang Sah dalam C 17?

Susan Sarandon
Lepaskan: 2024-10-29 03:19:02
asal
1046 orang telah melayarinya

Why Did

Mengapa i = i 1; Menjadi Undang-undang dalam C 17

Dalam C 11, coretan kod "i = i 1;" menimbulkan tingkah laku yang tidak ditentukan. Walau bagaimanapun, dalam C 17, kod ini boleh diterima di sisi undang-undang. Perubahan ini berpunca daripada jaminan penjujukan yang dipertingkatkan yang diperkenalkan dalam C 17.

Menurut piawaian C 11 [N3337 basic.exec], penjujukan kesan sampingan adalah tidak berjujukan melainkan dinyatakan secara jelas. Dalam kod contoh, pengendali tugasan (=) dan operator kenaikan postfix ( ) kedua-duanya mempunyai kesan sampingan yang boleh membawa kepada tingkah laku yang tidak ditentukan jika tidak disusun dengan betul.

Dalam C 17, ayat baharu telah ditambahkan pada [ N4659 expr.ass] yang menjelaskan peraturan penjujukan untuk pengendali tugasan:

The right operand is sequenced before the left operand.
Salin selepas log masuk

Pernyataan tambahan ini memastikan bahawa semua kesan sampingan dalam operan kanan dilaksanakan sebelum sebarang kesan sampingan dalam operan kiri, termasuk tugasan sendiri.

Dalam kes "i = i 1;", operan kanan (i 1) terdiri daripada pengendali kenaikan postfix (i ) dan pemalar 1. Jaminan penjujukan yang diperkenalkan dalam C 17 memastikan bahawa kenaikan postfix dilakukan dan kesan sampingannya berlaku sebelum tugasan dilaksanakan. Ini menghapuskan gelagat tidak jelas yang terdapat dalam C 11.

Oleh itu, jaminan penjujukan yang dipertingkatkan dalam C 17 telah menjadikan "i = i 1;" sah dengan memastikan bahawa kesan sampingan operan kanan dan kiri disusun dengan betul, menghalang tingkah laku yang tidak ditentukan.

Atas ialah kandungan terperinci Mengapakah \'i = i 1;\' Menjadi Operasi yang Sah dalam 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