[英]Passing return value of a function as reference
在以下情況中應該發生什么:
int functionA() {
return 25;
}
void functionB(const int& ref) {
cout << ref << endl;
}
void start() {
functionB(functionA());
}
編譯此示例時,它會輸出正確的值25.這是如何工作的? 當僅使用對它的引用時,不應該刪除堆棧上引用的返回值(從堆棧中刪除),還是行為未定義?
這“因為const int& ref
而工作” - 當引用是const
(保證你不想改變它),編譯器會在調用代碼中生成一個臨時對象( start
你的情況start
),然后傳遞參考那個。
如果刪除const
,它將無法編譯,因為functionA
的結果無法轉換為引用。
沒有“堆棧上的返回值”(更不用說“堆棧”): functionA
按值返回一個int
,因此表達式functionA()
只是int
類型的臨時值。 這個值綁定到functionB
的常量引用,並且因為它的生命周期是完整表達式的生命周期,所以一切都很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.