[英]Order of evaluation of expressions in a function call
給定一個 function 調用func(E1, E2, E3)
,其中 E1 等是任意表達式,是否每個表達式相對於其他表達式的順序是不確定的,或者所有表達式都是無序的(即評估可以重疊)?
我查看了關於此的cppreference 頁面,它在規則 15 中使用了這句話
在 function 調用中,每個參數初始化的值計算和副作用相對於任何其他參數的值計算和副作用是不確定的。
我認為這與我所要求的不太一樣,因為參數的初始化只是評估參數表達式的最后一步。
但是規則 21 正在談論其他事情似乎暗示 function 調用中的每個子表達式都是不確定的順序
括號中的初始化程序中以逗號分隔的表達式列表中的每個表達式都被評估為好像對於 function 調用(不確定順序)
所以我有點困惑,任何指導表示贊賞。
C++17 狀態
8.2.2 Function 調用 [expr.call]
4...每個參數的初始化和銷毀發生在調用function的上下文中。
5... 注意:參數評估的所有副作用在輸入 function 之前排序
5...參數的初始化,包括每個相關的值計算和副作用,相對於任何其他參數的初始化是不確定的。
我希望這(我的粗體字)足夠清楚。
(參考: n4659,最終 C++17 草案)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.