char &get_val(std::string &str, int index) { return str[index]; }
```
-尽管有了右值引用,你仍然不能返回在函数中新分配的栈空间,如果一定要在函数内分配新的空间并返回,请使用堆分配。例如如下两个函数都会产生悬垂引用,导致内存错误。
+你不能返回在函数中的局部变量的引用,如果一定要在函数内的变量。请使用动态内存。例如如下两个函数都会产生悬垂引用,导致未定义行为。
```cpp
-std::vector<int>& getLVector() {
+std::vector<int>& getLVector() { // 错误:返回局部变量的左值引用
std::vector<int> x{1};
return x;
}
-std::vector<int>&& getRVector() {
+std::vector<int>&& getRVector() { // 错误:返回局部变量的右值引用
std::vector<int> x{1};
return std::move(x);
}
```
-å\8f³å\80¼å¼\95ç\94¨å\8fªè\83½å\9c¨é\83¨å\88\86æ\83\85å\86µä¸\8bå\8f¯ä»¥é\81¿å\85\8dè¿\94å\9b\9eå\80¼æ\8b·è´\9dï¼\8cå\89\8dæ\8f\90æ\98¯å®\83æ\8c\87å\90\91ç\9a\84空é\97´å\9c¨è¿\9bå\85¥å\87½æ\95°å\89\8då·²ç»\8få\88\86é\85\8d。
+å½\93å\8f³å\80¼å¼\95ç\94¨æ\8c\87å\90\91ç\9a\84空é\97´å\9c¨è¿\9bå\85¥å\87½æ\95°å\89\8då·²ç»\8få\88\86é\85\8dæ\97¶ï¼\8cå\8f³å\80¼å¼\95ç\94¨å\8f¯ä»¥é\81¿å\85\8dè¿\94å\9b\9eå\80¼æ\8b·è´\9d。
```cpp
struct Beta {
Beta_ab ab;
Beta_ab const& getAB() const& { return ab; }
- Beta_ab&& getAB() && { return move(ab); }
+ Beta_ab&& getAB() && { return std::move(ab); }
};
Beta_ab ab = Beta().getAB(); // 这里是移动语义,而非拷贝