std::vector&& getvec() {
std::vector a;
a.push_back(1);
return std::move(a); // 返回局部變量的右值引用
}
int main() {
std::vector a = getvec(); // a 為空!
}
函數返回 std::vector,綁定的是局部變量 a。函數結束時 a 被銷毀,返回的引用變成懸空引用。雖然 std::move 將 a 轉為右值,但無法延長其生命週期。
std::vector getvec() {
std::vector a;
a.push_back(1);
return a; // 編譯器優化消除拷貝
}
std::vector&& getvec(); // 聲明不變
int main() {
std::vector&& a = getvec(); // 綁定到臨時對象,生命週期延長至 a 作用域結束
// 使用 a...
}