`i = i 1;` が C 17 で合法になったのはなぜですか?

Barbara Streisand
リリース: 2024-11-01 06:38:01
オリジナル
642 人が閲覧しました

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

C 17 i = i 1 を合法化します。演算子の評価順序の改訂により

C 11 では、代入 i = i 1;未定義の動作とみなされていました。ただし、C 17 では有効な表現になりました。この変更を理解するには、演算子評価の改訂されたルールを詳しく調べる必要があります。

C 17 以前の未定義の動作

C 11 では、オペランド評価の順序代入演算子の値の計算は次のように定義されました。

  • オペランドは代入操作の前に順序付けされました。
  • スカラー変数の副作用は、他の副作用と値の計算の両方に対して順序付けされていませんでした。

i = i 1; では、ポスト-increment i は副作用 (i の値の変更) を示し、代入操作とインターリーブされる可能性があります。この順序付けされていない副作用の可能性により、未定義の動作が発生しました。

C 17 の改訂された順序付けルール

C 17 では、代入演算子に対する新しい順序付けルールが導入されました:

  • 右オペランドは左オペランドよりも前に順序付けされますオペランド。

この改訂されたルールは、右側のオペランドの値の計算と副作用の両方に適用されます。

i = i 1;

の合法化

i = i 1; では、右側のオペランドは i 1 です。この式の評価には、範囲内の i の後置インクリメントが含まれます。新しいルールによれば、この評価全体は順序付けされ、i への代入前に完了します。

したがって、C 17 では、i を変更する行為 (副作用)実際の割り当ての前に完了するため、順序付けされていない副作用が発生する可能性が排除されます。この修正された順序付けにより、i = i 1 になります。 C 17 で有効な表現です。

以上が`i = i 1;` が C 17 で合法になったのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!