標準的12.2.5節說:臨時壽命延長
臨時結合到在函數調用的基準參數(5.2.2) 持續直到含有 呼叫充分表達的完成。函數返回 語句(6.6.3)中的返回值的臨時綁定一直存在,直到函數退出。在所有這些情況下,在表達式 的評估過程中創建的臨時對象在 的全表達式結尾處被銷燬,除了臨時參考被綁定到該臨時對象外,它們被創建並且在完成相反順序的 他們的建設。
我試圖理解的代碼是:
#include <iostream>
const int& foo(const int& fooRef)
{
return fooRef;
} // #0
int main (void)
{
const int& numberRef = foo(5); // #1
std::cout << numberRef; // #2
return 0;
}
在線#1
創建和綁定到foo
fooRef
參數臨時對象。 fooRef
在線#0
被銷燬。所以我認爲臨時應該在這裏銷燬,因爲終身延長不是傳遞性的。
問題:
是什麼
until the function exits
意思?這是否意味着untill it finished executing
?爲什麼我會得到一個
5
輸出。第#2
行上是否還存在臨時對象?如何解釋標準報價以找出這個例子的工作原理?
參考標準的分步原子走查將不勝感激。謝謝!
P. S.一個被接受的答案here也告訴代碼是broken
,我沒有得到,爲什麼我得到這樣的程序輸出。