[英]return by value assigned to const reference
我正在修復一些代碼中的另一個錯誤,並遇到了一些我認為是錯誤的代碼; 但是,此代碼在 gcc 4.4、4.5 和 4.6 下編譯,並且看起來像“預期的”一樣。 誰能告訴我這是否是有效的 C++?
struct foo {
int bar;
};
foo myfunction(foo const &orig) {
foo fooOnStack = orig;
fooOnStack.bar *= 100;
return fooOnStack;
}
void myOtherFunction(foo const &orig) {
foo const &retFoo = myfunction();
// perhaps do some tests on retFoo.bar ...
}
如果這是有效的 c++,有誰知道這是合法的背后的基本原理?
是的,這是合法的 C++。 對臨時對象形成對常量的引用會將臨時對象的生命周期延長到引用的生命周期。
我覺得你還是要小心。 我有一個案例,其中帶有 C++11 和復雜特征類型的 g++-4.9 不尊重這一點(即使它的生命周期應該延長,它也會刪除返回的臨時數據中的數據)。 因此,即使它可能是合法的,它也應該被標記為狡猾的,除非有一個很好的理由。
此外,鑒於 C++11 必須在調用站點分配臨時文件,如果按值返回,如果您使用最新標准,它的用處可能比以前少。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.