假設我們有這樣的代碼在C或C++:代碼中的函數執行順序如foo(bar())是什麼?
foo(bar());
什麼是在這種情況下,功能執行順序?
- 是否要求
bar()
首先調用,foo()
被稱爲不早於bar()
回報,在這種情況下foo()
傳遞的bar()
返回值? - 是否允許編譯器重新排列上述內容,即它首先調用
foo()
,並延遲調用bar()
,直到在foo()
的代碼中foo()
的參數的值實際上是需要的?
案例2可能是應該foo()
這樣被定義爲優化有用:
void foo(someType par) {
if(someTest())
baz1();
else
baz2(par);
}
在這種情況下,調用bar()
甚至可以完全跳過如果someTest()
回報false
。
但是,情況2也會使程序員必須更加小心,因爲它有時會導致微妙的錯誤(例如重複發生)。
bar()首先被調用。 –
只要_observable behaviour_是相同的,根本就沒有函數調用。並選擇**一個**語言! C和C++是具有非常不同語義的不同語言! – Olaf
類似,但更復雜的C + + 17:http://stackoverflow.com/questions/38501587/what-are-the-evaluation-order-guarantees-introduced-by-c17 –