相关疑难解决方法(0)

什么是移动语义?

我刚刚听完了Scott Meyers关于C++ 0x的软件工程电台播客采访.大多数新功能对我来说都很有意义,我现在对C++ 0x感到兴奋,除了一个.我仍然没有得到移动语义 ......它们究竟是什么?

c++ c++-faq move-semantics c++11

1614
推荐指数
11
解决办法
39万
查看次数

C++ 11 rvalues和移动语义混淆(return语句)

我试图理解rvalue引用并移动C++ 11的语义.

这些示例之间有什么区别,哪些不会执行矢量复制?

第一个例子

std::vector<int> return_vector(void)
{
    std::vector<int> tmp {1,2,3,4,5};
    return tmp;
}

std::vector<int> &&rval_ref = return_vector();
Run Code Online (Sandbox Code Playgroud)

第二个例子

std::vector<int>&& return_vector(void)
{
    std::vector<int> tmp {1,2,3,4,5};
    return std::move(tmp);
}

std::vector<int> &&rval_ref = return_vector();
Run Code Online (Sandbox Code Playgroud)

第三个例子

std::vector<int> return_vector(void)
{
    std::vector<int> tmp {1,2,3,4,5};
    return std::move(tmp);
}

std::vector<int> &&rval_ref = return_vector();
Run Code Online (Sandbox Code Playgroud)

c++ c++-faq rvalue-reference move-semantics c++11

415
推荐指数
3
解决办法
10万
查看次数

RVO,移动语义和争取最佳代码的斗争

如果我正确地得到它,移动语义允许从临时的,未命名的对象移动和重用资源.RVO虽然先前的移动语义更进一步,但"窃取"整个对象以避免额外的构造函数调用和赋值/复制函数.

这对我来说似乎有点反直觉,如果被调用的构造函数直接使用最终左值目标的地址直接将数据放在用户需要的地方,那么它会不会更快,更简单,用户更明显?

我的意思是,"在这个位置创建这个对象"似乎比"在某处创建这个对象,然后将其复制到正确的位置"更直观.

c++ optimization move-semantics return-value-optimization emplace

5
推荐指数
1
解决办法
222
查看次数