透過常數引用來理解臨時物件的生命週期
簡介:
簡介:在C 中,生命週期臨時物件的類型通常只延伸到創建它們的表達式的末尾。但是,當臨時物件綁定const引用時會出現異常,延長了其生命週期,超出了原來的作用域。
具體詢問:<code class="cpp">string foo() { return string("123"); } int main() { const string& val = foo(); printf("%s\n", val.c_str()); return 0; }</code>
下面的程式碼為什麼編譯透過執行成功,即使 foo 函數傳回的字串是臨時物件?
答案:C 標準明確定義綁定臨時物件對堆疊上const 的引用會延長臨時變數的生命週期,直到引用本身的生命週期為止。因此,在提供的程式碼中, foo() 傳回的臨時字串一直保持活動狀態,直到主函數的右大括號為止。
機制:此功能確保對臨時物件的引用不會成為懸空引用,否則會導致未定義的行為。當臨時物件綁定到 const 引用時,它的記憶體被有效地固定,允許程式繼續安全地使用它。
限制:需要注意的是此生命週期延長僅適用於基於堆疊的引用。相反,作為物件成員的引用不會延長臨時物件的生命週期。
其他資訊:有關此主題的更詳細討論,請參閱GotW #88:赫伯·薩特「最重要的常量」候選人。以上是為什麼常數引用可以延長 C 中臨時物件的生命週期?的詳細內容。更多資訊請關注PHP中文網其他相關文章!