草庐IT

move_member

全部标签

c++ - 理解 c++11 右值、 move 语义和性能

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:WhathappensifIreturnliteralinsteadofdeclaredstd::string?考虑以下代码stringgetName(){return"meme";}stringname=getName();getName()函数返回一个临时对象。在C++03中,我理解string的复制构造函数被调用并且临时对象被销毁。实际上,编译器(至少在GCC4.7中)似乎通过不创建对象name而是将其替换为临时对象本身而不是销毁临时对象来优化第5行。(我尝试使用MyVector类,而不是std::str

c++ - std::move 在 boost 库中的对应物

我正在尝试在我的代码中使用std::move,但我使用的编译器(g++4.4)不支持它。boost::move可以完全替代std::move吗?谢谢。 最佳答案 std::move(和boost::move当启用c++0x支持时)只是来自T&的转换至T&&.它实际上并没有移动任何东西。这意味着指针的具体类型T&&必须得到编译器的支持。GCC从4.3版本开始支持右值引用,所以boost版本应该没问题。但是,有没有理由不能使用std::move来自#include?http://en.cppreference.com/w/cpp/uti

c++ - (*i).member 是否比 i->member 效率低

拥有structPerson{stringname;};Person*p=...假设没有运算符被重载。哪个更有效(如果有的话)?(*p).name对比p->name在我脑后的某个地方,我听到一些铃声,*解引用运算符可能会创建一个对象的临时拷贝;这是真的吗?这个问题的背景是这样的案例:Person&Person::someFunction(){...return*this;}我开始怀疑,如果将结果更改为Person*并在最后一行简单地returnthis会不会有什么不同(在性能上)? 最佳答案 没有区别。即使标准说这两者是等价的,如果

c++ - 对 `Static Class Member variable inside Static member function' 的 undefined reference

我实际上正在尝试实现分页的模拟,在我的内存管理器中,我尝试创建一个静态页表,但是当我尝试打印它时它给出了引用错误。#ifndefMEMORYMANAGER_H#defineMEMORYMANAGER_H#include"memory.h"classMemoryManager{private:PhysicalMemoryRAM;LogicalMemoryVM;intoffsetValue;staticint**pageTable;public:MemoryManager();booladdProcess(TimeSliceRequest);voidprintVirtualMemory()

c++ - 为什么需要 std::move?

我读了一个beautifularticleC++11中的移动语义。这篇文章是用一种非常直观的方式写的。下面给出文章中的示例类。classArrayWrapper{public://defaultconstructorproducesamoderatelysizedarrayArrayWrapper():_p_vals(newint[64]),_metadata(64,"ArrayWrapper"){}ArrayWrapper(intn):_p_vals(newint[n]),_metadata(n,"ArrayWrapper"){}//moveconstructorArrayWrapp

c++ - move 操作的条件编译

如何检查我的编译器是否支持右值引用?是否有标准的预处理器宏,或者不同的编译器有不同的宏?理想情况下,我想这样写:#ifdefRVALUE_REFERENCES_SUPPORTEDfoobar(foobar&&that){//...}#endif 最佳答案 我不知道有任何标准的预处理器宏,但是:VisualStudio在VC2010引入了支持,内部版本是1600,可以用_MSC_VER>=1600查看自version4.3以来,GCC一直支持右值引用,因此您可以检查该版本以及__GXX_EXPERIMENTAL_CXX0X__Clan

c++ - 使用 std::move

在C++11之前,我使用swap-to-back来避免深度复制开销,例如:vector>Objects;for(/*somerange*/){vectorv;for(/*someotherrange*/){v.push_back(/*someobject*/);}Objects.push_back(vector());Objects.back().swap(v);}我如何使用std::move将v移动到Objects中而不是swap?我知道这里有很多变通方法,比如多数组或直接插入Objects.back(),但我需要一个std::move的用法示例明白了。

windows - 从 ReplaceFile 重现 ERROR_UNABLE_TO_MOVE_REPLACEMENT_2 错误代码

我正在使用ReplaceFileWin32函数作为获取原子行为的操作的一部分。在该函数的三个特殊错误代码中,我已经能够从两个错误代码中重现和恢复(回滚):ERROR_UNABLE_TO_MOVE_REPLACEMENT和ERROR_UNABLE_TO_REMOVE_REPLACED。我的问题与第三个错误代码有关:ERROR_UNABLE_TO_MOVE_REPLACEMENT_2。有没有人看到返回此错误代码?在什么条件下是可能的?关于如何重现此错误以便我可以测试从错误中恢复的代码中的路径有什么想法吗?我从文档中了解到,要从此错误中恢复(回滚),我需要将替换文件重命名回其原始名称,因为R

c# - 汉诺塔 : Moving Rings from Peg to Peg

扩展我之前的帖子,我还在写汉诺塔。在解释了如何在钉子上画环的绝妙解决方案之后,我仍然有一个问题,我已经摆弄了很长一段时间了。这是我的PegClass:namespaceTowers_Of_Hanoi{classPegClass{privateintpegheight;privateinty=3;int[]rings=newint[0];publicPegClass(){//thisisthedefaultconstructor}publicPegClass(intheight){pegheight=height;}//otheruserdefinedfunctionspublicvoi

Git报错: Please move or remove them before you switch branches.

Bug记录:在我写需求的时候,产品说上个包有崩溃,于是我就控制台gitcheckout切分支,结果报错Pleasemoveorremovethembeforeyouswitchbranches.下面是被改动的文件,因为是项目build的时候产生的临时文件,一般都不会上传,所以就想着把它删掉。1.首先:gitstatus产看当前分枝的状态 ,知道哪些东西有改动。2.查看哪些是要删除的gitclean-n3.如果想彻底删除本地修改,使用gitclean-dfx。gitclean-dfxtips:此操作会完全删除本地修改,你的代码就会和远程的代码一致。