草庐IT

move_member

全部标签

c++ - C++ 中的类布局 : Why are members sometimes ordered?

C++标准规定,单个访问部分内的成员变量必须按照它们声明时的相同顺序在内存中布局。同时,编译器可以自由选择访问部分的相互顺序。这种自由使得理论上不可能链接由不同编译器创建的二进制文件。那么,严格的段内排序的其余原因是什么?即将推出的C++09新的C++11标准是否提供了一种完全“手动”确定对象布局的方法? 最佳答案 Thisfreedommakesitimpossibleintheorytolinkbinariescreatedbydifferentcompilers.由于多种原因这是不可能的,结构布局是最次要的。vtables,o

c++ - 使用 std::move 传入一个临时 lambda,或者向 "pull"输出一个临时参数,有什么区别?

我有以下(设计的)代码,其中我有一个带有单个打印函数的打印机类和一个处理字符串然后调用打印函数回调函数的工作类:#include#includeusingcallback_fn=std::function;classprinter{public:boolprint(std::stringdata){std::cout注意:我调用了两次std::move()...现在这有效(令我惊讶),但我两次调用都只是为了展示我是什么试。我的问题是:我是否应该在set_callback()函数中使用std::move()来“提取”温度,如果我使用它,是否真的有一个拷贝还是std::move()意味着它

c++ - 如果类包含标准容器,我可以将类 move 操作标记为 noexcept 吗?

在具有标准容器成员的类上实现move操作的惯用方法不能是noexcept因此不能通过vector.push_back()等操作move.还是我弄错了?从中获取速度vectordata;//...data.push_back(elem);鼓励我们进行move操作noexcept--因此在vector调整大小时,库可以安全地将元素move到重新分配的存储空间。classElem{//...Elem(Elem&&)noexcept;//noexceptimportantformoveElem&operator=(Elem&&)noexcept;//noexceptimportantformo

c++ - move 语义和原始类型

示例代码:intmain(){std::vectorv1{1,2,3,4,5,6,7,8,9,10};std::coutv2(std::make_move_iterator(v1.begin()),std::make_move_iterator(v1.end()));std::coutv3{"some","stuff","to","put","in","the","strings"};std::coutv4(std::make_move_iterator(v3.begin()),std::make_move_iterator(v3.end()));std::cout输出:Printin

c++ - std::move 是否应该用于 return-statements 以提高效率?

我不知道下面代码中的std::move是做了什么好事还是完全错误?Object类同时定义了Move和Copy构造函数。首先:随着move:templatetemplateconstObjectObject::operator*(constF&rhs)const{returnstd::move(Object(*this)*=rhs);//Weendinmoveconstructor}第二种:不move:templatetemplateconstObjectObject::operator*(constF&rhs)const{returnObject(*this)*=rhs;//Weend

c++ - std::move(T&&) 和临时对象。临时从哪里来?

我很好奇为什么我不能编译下面的代码。这是无意义的代码(我知道),但我最初在其他一些使用具有完美转发等模板的代码中遇到了这个问题。我设法将问题缩小到std::move/std::forward/std::remove_reference,并且我'我很好奇为什么它首先需要一个临时的...#include#includestructFoo{Foo(Foo&&other){printf("Foo::(Foo&&)%p\n",this);}Foo(){printf("Foo::()%p\n",this);}~Foo(){printf("Foo::~Foo()%p\n",this);}};void

c++ - 编译器如何知道 move 局部变量?

我很好奇这个功能究竟是如何工作的。考虑类似的事情std::unique_ptrf(){std::unique_ptrlval(nullptr);returnlval;}此代码即使对于仅move类型也能很好地编译,因为编译器会隐式move它。但从逻辑上讲,对于任何返回表达式,确定结果是否引用局部变量将解决暂停问题——如果编译器简单地将所有局部变量视为返回表达式中的右值,那么这将是有问题的,因为变量可以在那个表达式中多次引用。即使本地只有一个直接引用,您也无法证明它没有其他间接别名。那么编译器如何知道何时从返回表达式move? 最佳答案

c++ - 在没有 std::move 的情况下如何按值返回 unique_ptr?

这个问题在这里已经有了答案:Returningunique_ptrfromfunctions(7个答案)关闭8年前。std::unique_ptrptr(){std::unique_ptrp(newint(3));returnp;//Whydoesn'tthisrequireexplicitmoveusingstd::move?}//Whydidn'tthedatapointedtoby'p'isnotdestroyedherethoughpisnotmoved?intmain(){std::unique_ptra=ptr();//Whydoesn'tthisrequirestd::m

c++ - xcode 7 如何抑制警告 "overrides a member function but is not marked ' override'”

我今天将xcode更新为7。更新后,我正在处理的项目出现警告“覆盖成员函数但未标记为‘覆盖’”。由于我们的项目将“踩踏警告为错误”设置为true。我遇到了很多错误。我仔细检查了“OtherLinkerFlags”并且非常确定“-Wsuggest-override”标志不包括在内。因为这是一个大项目,我更喜欢抑制警告,而不是在任何地方添加关键字“override”。关于禁用警告的任何建议?谢谢 最佳答案 您需要关闭-Winconsistent-missing-override标志,该标志会在最新版本的clang上自动添加-Wall。您

c++ - 在 C++11 中编写 Copy/Move/operator= 三重奏的 "correct"方法是什么?

至此,复制构造函数和赋值运算符对的编写就定义好了;快速搜索将使您找到大量有关如何正确编码这些内容的信息。既然移动构造函数已经加入进来,是否有新的“最佳”方式? 最佳答案 最好,它们只是=default;,因为成员类型应该是对您隐藏移动细节的资源管理类型,比如std::unique_ptr。只有那些“低级”类型的实现者才应该费心去处理它。请记住,如果您持有外部(对您的对象)资源,您只需要费心移动语义。它对“平面”类型完全没用。 关于c++-在C++11中编写Copy/Move/operat