首頁 > 後端開發 > C++ > 主體

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

Linda Hamilton
發布: 2024-10-29 12:36:02
原創
148 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!