草庐IT

move_disc

全部标签

c++ - 是否保证在返回时 move 临时对象的子对象?

#include#includeusingnamespacestd;autof(){vectorcoll{"hello"};////MustIusemove(coll[0])?//returncoll[0];}intmain(){autos=f();DoSomething(s);}我知道:如果我只是returncoll;,那么coll肯定会在返回时move。但是,我不确定:coll[0]是否也保证在返回时move?更新:#includestructA{A(){std::coutgcc6.2和clang3.8输出相同:constructedcopy-constructeddestruct

c++ - 复制/move 省略需要复制/move 构造函数的显式定义

考虑以下程序:#include#includeclassT{public:T(){printf("addressatconstruction:%zx\n",(uintptr_t)this);}//T(constT&){printf("copy-constructed\n");}//helps//T(T&&){printf("move-constructed\n");}//helps//T(constT&)=default;//doesnothelp//T(T&&)=default;//doesnothelp};Tf(){returnT();}intmain(){Tx=f();print

c++ - 将其 move 到 map 后访问一对

如果我将一对move到映射中,但由于键已经存在而导致插入失败,我可以在之后安全地使用该对吗?//objectsavailable:map,pairautoinsert_pair=map.insert(std::move(pair));if(!insert_pair.second){//canIsafelyaccesspairhere?}这是否记录在标准中? 最佳答案 鉴于规范的当前状态,您不能对函数调用返回后参数的状态做出任何假设,这看起来多么荒谬(请阅读下文)。要了解原因,我们首先要指出insert()成员函数是根据emplace

c++ - 为什么 std::map 的 move 构造函数不是 noexcept?

正如cppreference.com所说,Mapsareusuallyimplementedasred-blacktrees.所以move一个std::map只是将指针move到根节点+其他信息如大小。为什么std::map的move构造函数没有标记为noexcept? 最佳答案 这是因为我无法说服所有的实现者进入可以放入map的无资源状态。例如,一个实现需要有一个端节点指向,即使在默认构造状态下也是如此。允许(但不是必需)实现将该端节点放在堆上。Amoved-frommapmustbeinavalidstate.IE。当end()

c++ - "Extending move semantics to *this"是什么意思?

拜托,有人可以用简单的英语解释什么是“Extendingmovesemanticsto*this”吗?Iamreferringtothisproposal.我要寻找的只是什么是什么以及为什么我们需要它。请注意,我确实理解一般的右值引用是什么,move语义是建立在它之上的。我无法理解这样的扩展添加到右值引用的内容! 最佳答案 ref-qualifier特性(指示*this的类型)将允许您区分成员函数是否可以在右值或左值(或两者)上调用,并根据那。firstversion在非正式部分给出了一些理由:Preventsurprises:st

c++ - 我应该如何编写函数参数来执行 move 而不是复制?

我想使用该类的构造函数将一个大容器从一个返回值move到另一个类中。如何制定参数以确保它最终不会被复制?/*forthesakeofsimplicity,imaginethistypedeftobeglobal*/typedefstd::unordered_mapumap;umapfoo(){umapm;/*fillwithlotsofdata*/returnm;}classBar{public:Bar(umapm):bm(m){}private:umapbm;};BarmyBar(foo());//runfooandpassreturnvaluedirectlytoBarconstr

windows - 将多个文件从多个文件夹 move 到一个文件夹

我正在寻找一个.bat文件,它可以查看包含同名子文件夹的多个文件夹,并将其内容move到指定文件夹。文件夹结构:主文件夹MainTextures_folderProp文件夹--model1_子文件夹------Textures_subfolder----------图像文件--model2_子文件夹--------Textures_subfolder----------图像文件--model3_子文件夹--------Textures_subfolder----------图像文件--model4_子文件夹--------Textures_subfolder----------图像文件

c++ - move 语义和窗口句柄。 DeleteObject 安全句柄?

Windows中是否存在某种NULL句柄?如果我通过CreateCompatibleBitmap()创建一个bmp并通过DeleteObject()删除它并且想要使用move语义,我想确保位图没有被破坏。因此,我必须将HBITMAP设置为可以安全删除的值。比如deletenullptr。 最佳答案 首先是坏消息。由于历史原因,WindowsAPI中没有普遍有效的“无效句柄”值。Windows中的不同子系统将NULL或INVALID_HANDLE_VALUE视为无效句柄值(用于返回无效句柄值和获取无效句柄值)。Relatedartic

c++ - 为什么不可能将变量 move 到另一个 std::thread

不能将一个对象move到另一个std::thread的原因是什么?在某些情况下它可能会有用。例如:您创建了一个接受传入套接字连接的循环。将传入连接move到另一个将处理连接的线程会很好。您不再需要接受循环中的连接。那么为什么要创建一个指针呢?一个小测试用例:#include#includeusingnamespacestd;classPointertest{public:Pointertest(){cout 最佳答案 std::thread构造函数必须以与大多数转发函数有所不同的方式处理您提供的参数。之所以会这样,是因为线程真正开始

windows - VS代码: moving files out of appdata directory

我在公司的笔记本电脑上,应用数据的存储空间有限。最初的谷歌显示实际上没有任何移动目录的设置。我正在考虑简单地将相关目录即\AppData\Roaming\Code复制到其他地方,然后创建一个具有相同名称的硬符号链接(symboliclink)(连接),然后将其指向相同的位置即在命令行中:mklink/JC:\Users\me\AppData\Roaming\CodeC:\myFolder\Code我试着移动整个appdata文件夹(右键单击roaming/local/locallow,然后单击属性,然后单击位置选项卡,然后更改目录)。我设法只移动了一半的文件。它似乎一直有效,直到我重新