草庐IT

移动侦测

全部标签

c++ - 如果右值没有绑定(bind)到 const 引用,这将如何影响移动语义和完美转发?

在http://www.reddit.com/r/IAmA/comments/1nl9at/i_am_a_member_of_facebooks_hhvm_team_a_c_and_d/ccjm2qs,AndreiAlexandrescu写道:IthinkbindingrvaluestoconstreferenceshasbeenthesmallmistakethatcausedthervaluereferencesHindenburg...Itwouldbealongdiscussion.Bindingrvaluestoconst&madesensewhenfirstintroduc

c++ - 将 unique_ptr 从一个集合移动到另一个集合

我似乎无法弄清楚并尝试了以下建议:Move`unique_ptr`sbetweensetshowtomoveanstd::unique_ptrfromoneSTLcontainertoanother?我有两个包含唯一指针的集合:std::set>s1,s2;指针当然是唯一的,但some_type的值可能是也可能不是,所以在将s2连接到s1之后,s1的大小可能与|s1+s2|相同或一样大。看来我应该能够做到这一点:move(s2.begin(),s2.end(),inserter(s1,s1.end()));但这在clang++3.8/g++5.4中失败了。这里缺少什么?

c++ - 在 C++11 之前移动语义是如何解决的?

我最近一直在阅读移动语义以及它是如何被引入到C++11中的。主要要点是,通过“窃取”指向临时对象的指针来创建对象,程序可以变得更有效率。这比深拷贝临时对象来创建新对象要高效得多。在C++11(及更高版本)中,这是通过使用右值引用来实现的。所有临时对象(在程序内存中没有已知位置的对象)都被视为右值。具体来说,现在可以重载类构造函数以接受右值引用。所以我很好奇,在C++11之前,这个“昂贵的临时对象拷贝”问题是如何解决的? 最佳答案 完成此操作的主要方式是通过std::swap。std::swap可以重载/专门用于可以比默认的“通过临时

Unity的四种常见移动方法

        能让自己的物体动起来一定很酷,让我们来总结一点关于移动的方法吧一.Transform组件        你知道的我们总是可以调用物体的身上的组件,修改组件上的参数,以此来完成我们对物体的控制,在transform中有关于物体的三维坐标,角度等。        我首先定义了一个公共的浮点型变量,用它来实现我们对速度大小的控制。        在Update中我调用transform组件中Translate方法来改变他的三维坐标,Translate方法会将身后的括号内的三维向量加到物体坐标上。Translate (x轴,y轴,z轴,(参考系)); //(默认为自身参考系)     

c++ - std::map:它可以在插入键后复制和移动键吗?

换句话说,存储指向映射中的键的指针是否安全?或者map是否有可能在其生命周期内复制和移动键,从而使现有指针无效?文档说:“迭代器有效性:没有变化。”这是否意味着我的问题的答案是“不,它们不能被复制或移动”? 最佳答案 std::map容器模板提供了一个基于节点的容器,这意味着迭代器和对容器元素的引用永远不会失效,直到元素被从中删除map。因此,只要map处于事件状态并且元素仍在其中,您就可以将元素键地址分发给第三方。 关于c++-std::map:它可以在插入键后复制和移动键吗?,我们在

c++ - 调用复制 ctor 而不是移动 ctor

为什么从bar返回时调用复制构造函数而不是移动构造函数?#includeusingnamespacestd;classAlpha{public:Alpha(){cout如果bar执行returnmove(a)则行为符合预期。我不明白为什么调用std::move是必要的,因为foo在返回时调用移动构造函数。 最佳答案 在这种情况下有两件事需要理解:ainbar(Alpha&&a)是一个命名的右值引用;因此,被视为左值。a仍然是引用。第1部分由于bar(Alpha&&a)中的a是一个命名的右值引用,因此它被视为左值。将命名右值引用视为左

c++ - 在可移动和不可复制的类上使用移动和交换习语是否有意义

如果我有一个类classFoo{public:Foo(){...}Foo(Foo&&rhs){...}operator=(Foorhs){swap(*this,rhs);}voidswap(Foo&rhs);private:Foo(constFoo&);//snip:swapcode};voidswap(Foo&lhs,Foo&rhs);如果我没有复制构造函数,按值和交换实现operator=是否有意义?它应该防止复制我的Foo类对象,但允许移动。此类不可复制,因此我不能复制构造或复制分配它。编辑我已经用它测试了我的代码,它似乎具有我想要的行为。#include#includeusin

c++ - 在 C++0x 中未调用移动构造函数

请在下面找到我的代码,我曾经调用移动构造函数(代码灵感来自其他站点)并让我知道它有什么问题,我使用的是GCC4.5.3#include#includeclassInt_Smart_Pointer{int*m_p;public:Int_Smart_Pointer(){std::coutptr_vec;ptr_vec.push_back(getMove_Constructor());ptr_vec.push_back(getMove_Constructor());std::cout输出是ExplicitConstructor:10CopyConstructor:ExplicitConstr

c++ - 将模板方法移动到派生中断编译

给定以下代码:templateclassA{public:Tt;};classB{public:voidfoo(inti){}templatevoidfoo(A&a){}};intmain(){Aa;Bb;b.foo(a);b.foo(a.t);}这可以编译并且工作正常;B::foo()的正确重载版本被选择并为a和a.t调用。现在我引入一个新的类C,它派生自B并将::foo()的模板版本移出B并进入C:templateclassA{public:Tt;};classB{public:voidfoo(inti){}};classC:publicB{public:templatevoidf

c++ - 默认生成的移动成员有什么作用?

我想制作一个管理大对象的容器,该容器在复制构造和复制分配时执行深度复制。templateclassContainer:publicstd::vector>{public:Container(intnToAllocate){/*fillwithdefaultconstructedTBigObjects*/}Container(constContainer&other){/*deepcopy*/}Container(Container&&)=default;Container&operator=(constContainer&population){/*deepcopy*/}Contain