C 中賦值語句的求值順序
給映射賦值時會得到一個令人費解的輸出:
<code class="cpp">map<int, int> mp; printf("%d ", mp.size()); mp[10] = mp.size(); printf("%d\n", mp[10]);</code>
0 1
這個結果可能看起來違反直覺,因為人們可能期望分配後地圖大小為1。然而,賦值語句的求值順序在這裡扮演著至關重要的角色。
賦值 mp[10] 的左側傳回映射元素的基礎值的參考。同時,此操作為 mp[10] 元素建立一個新值。僅在此操作之後,才會使用新計算的地圖大小來評估右側。
此行為未在 C 標準中明確說明,但屬於未指定行為。最近的提案 N4228 旨在細化求值規則的順序以指定此類情況。
以上是為什麼在 C 中分配給映射元素會導致意外的大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!