为什么从函数返回时不触发C++11的移动语义?关于右值引用的问题
你好!我开始学习C++11和移动语义,遇到了一个问题。我写了一个简单的函数,它创建一个vector并返回它:
```cpp
#include
#include
std::vector createVector() {
std::vector v = {1, 2, 3, 4, 5};
return v; // 希望这里能移动
}
int main() {
std::vector result = createVector();
std::cout << "Size: " << result.size() << std::endl;
return 0;
}
```
我期望在return时调用move constructor以避免复制。但当我阅读关于rvalue reference和move semantics时,很多人说编译器自己决定怎么做。我尝试显式使用std::move:
```cpp
return std::move(v);
```
但有些人说这甚至可能降低性能!为什么?普通的return和带std::move的return有什么区别?如何保证从函数返回时移动语义生效?我对这些细节感到困惑:rvalue、lvalue、