首頁  >  文章  >  後端開發  >  C 賦值語句中的求值順序如何影響輸出?

C 賦值語句中的求值順序如何影響輸出?

Linda Hamilton
Linda Hamilton原創
2024-10-29 12:36:02140瀏覽

How Does the Order of Evaluation in C   Assignment Statements Affect the Output?

C 中賦值語句的求值順序

在給定的程式碼片段:

map  mp;<br>printf("%d ", mp.size());<br>mp[10]=mp.size();<br>printf("%dn", mp[ 10]);<br>

看似違反直覺的輸出「0 1」是由於賦值中子表達式的求值順序未指定而產生的。

根據 C 標準,賦值語句中的求值順序是未定義的。 但是,行為如下:

  1. 賦值的右邊(在本例中為 mp.size())被求值首先。
  2. 賦值的左邊 (mp[10]) 被修改為引用右側傳回的基礎值。
  3. 然後左側再次計算其值以用於

因此,在程式碼片段中,mp.size() 被評估為 0 並分配給 mp[10]。然後,再次計算 mp[10],它現在會傳回分配給它的值 (1)。

儘管目前C 標準中未指定,但此行為已在最近的提案中得到解決( N4228):

N4228 建議細化評估規則的順序,以使其針對某些情況(包括上述情況)進行明確定義。根據該提案,賦值的右操作數在左操作數之前排序。

這意味著在 C 17 及更高版本中,程式碼片段的行為可能會被明確定義並導致輸出「1 1。」

以上是C 賦值語句中的求值順序如何影響輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn