我一直在玩 c++11 移动语义
在代码中...
#include <vector>
#include <string>
std::vector<std::string> GetNewVector()
{
std::vector<std::string> newVec;
newVec.push_back(std::string("hello")); //(1)
newVec.push_back(std::string("whey")); //(2)
return newVec;
}
int main(int argc, char* argv[])
{
std::vector<std::string> vec = GetNewVector();
}
在点 (1) 处,“hello”对象的移动构造函数在对象被移动到向量中时被调用。
在第 (2) 点,首先再次调用“hello”的移动构造函数(我假设这是向量重新分配的位置),然后调用“乳清”移动构造函数。
这一切都如预期的那样,但是我希望在结束时返回向量时再次移动对象GetNewVector()
,但是不会再次调用移动构造函数。我的猜测是 RVO 正在发生,但是当我在调试模式下运行 Visual Studio (2k10) 时,我不确定这是否会发生?
如果可以执行 RVO,那么它是否会优先于使用移动构造函数?