C の代入ステートメントの評価順序
mp[10] = mp など、マップ要素に値を代入する場合。 size() を使用する場合、式の評価順序が重要になります。この特定の式は、予期しない結果「0 1」を生成します。これにより、C で指定された評価順序について疑問が生じます。
C 標準では、関数呼び出しなどの特定の操作については評価順序が指定されていないと指定されています。ただし、= のような代入演算子は、右側と左側のオペランドの評価の後に順序付けされ、指定された順序にギャップが残ります。このあいまいさにより、洗練された提案の必要性が生じています。
最近の C 標準提案 (N4228) は、特定のケースの評価順序を指定することで、この問題に対処しようとしています。 N4228 によれば、この特定の代入式は、両方のオペランドの評価が順序付けされていない、未指定の動作のカテゴリに分類されます。
N4228 の改訂版 (P0145R0) に従って、この動作は現在指定されています。改訂されたセクション [expr.ass] では、代入演算子の右オペランドが左オペランドの前に順序付けされると述べています。したがって、指定された式では、mp.size() が最初に評価され、続いて結果が mp[10] に割り当てられます。更新された C 17 標準では、この評価順序が明確になることが期待されています。
要約すると、代入ステートメントの評価順序は特定のケースでは未指定のままですが、最新の C 標準提案 (N4228) はこれらのルールを改良することを目的としています。現在受け入れられている仕様である P0145R3 は、代入の右オペランドが左オペランドより前に評価されることを明確にし、指定された式の曖昧さを解決しています。
以上がC は代入ステートメントの右側と左側のオペランドをどのように評価しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。