C 中賦值語句的求值順序
在給定的程式碼片段:
map mp;<br>printf("%d ", mp.size());<br>mp[10]=mp.size();<br>printf("%dn", mp[ 10]);<br>
看似違反直覺的輸出「0 1」是由於賦值中子表達式的求值順序未指定而產生的。
根據 C 標準,賦值語句中的求值順序是未定義的。 但是,行為如下:
因此,在程式碼片段中,mp.size() 被評估為 0 並分配給 mp[10]。然後,再次計算 mp[10],它現在會傳回分配給它的值 (1)。
儘管目前C 標準中未指定,但此行為已在最近的提案中得到解決( N4228):
N4228 建議細化評估規則的順序,以使其針對某些情況(包括上述情況)進行明確定義。根據該提案,賦值的右操作數在左操作數之前排序。
這意味著在 C 17 及更高版本中,程式碼片段的行為可能會被明確定義並導致輸出「1 1。」
以上是C 賦值語句中的求值順序如何影響輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!