簡體   English   中英

嵌套函數調用評估順序

[英]Nested function calls order of evaluation

眾所周知,函數參數的評估順序未指定,並且可能因不同的編譯器而不同。

似乎不太清楚的是函數調用是否可以交錯,具體如下:

f(g(h()), i(j()))

讓我們假設編譯器首先選擇評估f的第一個參數。 編譯器是否可以在調用hg之間調用j 我相信,但我不知道在標准中哪里可以找到確認。

評估訂單未指定 - 參見標准第5.2.2 / 8節:

參數的評估順序未指定。 參數表達式求值的所有副作用在輸入函數之前生效。

我不知道標准是什么,但我認為如果對你很重要,那么你應該重新安排代碼,以便你知道將以什么順序發生什么(臨時變量是你的朋友)。 即使你弄明白標准是什么,如果我們假設你的編譯器正確地實現了這一點,那么你仍然會留下維護定時炸彈,因為你的繼任者不會知道你所做的一切。

標准未指定評估順序。 它僅取決於您的編譯器。

如果您在同一表達式中使用的函數以某種方式相關(一個影響另一個的結果),那么不同的調用順序會給出不同的結果,然后在表達式中避免使用嵌套函數。

我這樣做是好的做法,正是因為,正如另一個所說,調用順序是未定義的(如果優化器認為它更優化,你甚至可以進行隔行執行)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM