Avatar ·

为什么从函数返回时不触发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、