草庐IT

btn-move-forward

全部标签

c++ - 如何欺骗 boost::asio 以允许仅 move 处理程序

在RPC通信协议(protocol)中,在调用方法后,我将“完成”消息发送回调用者。由于方法以并发方式调用,包含响应的缓冲区(std::string)需要由互斥锁保护。我想要达到的目标如下:voidconnection::send_response(){//blockuntilpreviousresponseissentstd::unique_locklocker(response_mutex_);//prepareresponseresponse_="foo";//sendresponsebacktocaller.movetheunique_lockintothebinder//to

c++ - 如何返回不可 move (但可复制)的对象?

编辑:最终目标:我想创建一个从不使用move的容器类,即使它可用。NonMove是该容器的一类测试对象。我尝试了不同的变体,但GCC坚持要使用move。classNonMove{public:NonMove(){}//Copy.NonMove(constNonMove&){}NonMove&operator=(constNonMove&){}//MoveNonMove(NonMove&&)=delete;NonMove&operator=(NonMove&&)=delete;};NonMovefoo(){returnNonMove();}使用-std=gnu++11的GCC4.9.1出

c++ - 如何返回不可 move (但可复制)的对象?

编辑:最终目标:我想创建一个从不使用move的容器类,即使它可用。NonMove是该容器的一类测试对象。我尝试了不同的变体,但GCC坚持要使用move。classNonMove{public:NonMove(){}//Copy.NonMove(constNonMove&){}NonMove&operator=(constNonMove&){}//MoveNonMove(NonMove&&)=delete;NonMove&operator=(NonMove&&)=delete;};NonMovefoo(){returnNonMove();}使用-std=gnu++11的GCC4.9.1出

c++ - 在 C++11 中抛出异常时是否使用 move 语义?

http://www.drdobbs.com/cpp/practical-c-error-handling-in-hybrid-env/197003350?pgno=4在这篇文章中,HerbSutter解释说,抛出异常需要一个异常的拷贝,因为它是作为临时创建的,因此使用std::auto_ptr来绕过复制开销。鉴于C++11中提供了move语义,这还有必要吗? 最佳答案 我刚刚检查过,标准允许省略将throw表达式的操作数指定的对象复制或move到异常对象中如果您不更改程序的含义(即如果您重新抛出并且随后的捕获会突然看到一个已更改的

c++ - 在 C++11 中抛出异常时是否使用 move 语义?

http://www.drdobbs.com/cpp/practical-c-error-handling-in-hybrid-env/197003350?pgno=4在这篇文章中,HerbSutter解释说,抛出异常需要一个异常的拷贝,因为它是作为临时创建的,因此使用std::auto_ptr来绕过复制开销。鉴于C++11中提供了move语义,这还有必要吗? 最佳答案 我刚刚检查过,标准允许省略将throw表达式的操作数指定的对象复制或move到异常对象中如果您不更改程序的含义(即如果您重新抛出并且随后的捕获会突然看到一个已更改的

c++ - 通过调用 move 赋值运算符实现 move 构造函数

MSDN文章,Howto:WriteaMoveConstuctor,有以下推荐。Ifyouprovidebothamoveconstructorandamoveassignmentoperatorforyourclass,youcaneliminateredundantcodebywritingthemoveconstructortocallthemoveassignmentoperator.Thefollowingexampleshowsarevisedversionofthemoveconstructorthatcallsthemoveassignmentoperator://Mo

c++ - 通过调用 move 赋值运算符实现 move 构造函数

MSDN文章,Howto:WriteaMoveConstuctor,有以下推荐。Ifyouprovidebothamoveconstructorandamoveassignmentoperatorforyourclass,youcaneliminateredundantcodebywritingthemoveconstructortocallthemoveassignmentoperator.Thefollowingexampleshowsarevisedversionofthemoveconstructorthatcallsthemoveassignmentoperator://Mo

c++ - 普通的右值引用和 std::forward 返回的有什么区别?

我做不到:int&&q=7;int&&r=q;//ErrorMessage://cannotconvertfrom'int'to'int&&'//Youcannotbindanlvaluetoanrvaluereference如果我理解正确,在初始化右值引用时,也会初始化一个临时变量。所以int&&q=7;可以认为是:inttemp=7;int&&q=temp;当在右侧使用引用时,我实际上是在使用裁判。所以int&&r=q;可以认为是:int&&r=temp;//bindanlvaluetoanrvaluereference,causeerror,understandable以上是我对

c++ - 普通的右值引用和 std::forward 返回的有什么区别?

我做不到:int&&q=7;int&&r=q;//ErrorMessage://cannotconvertfrom'int'to'int&&'//Youcannotbindanlvaluetoanrvaluereference如果我理解正确,在初始化右值引用时,也会初始化一个临时变量。所以int&&q=7;可以认为是:inttemp=7;int&&q=temp;当在右侧使用引用时,我实际上是在使用裁判。所以int&&r=q;可以认为是:int&&r=temp;//bindanlvaluetoanrvaluereference,causeerror,understandable以上是我对

c++ - 为什么所有迭代器/迭代器适配器在 C++11 中都不可 move ?

在this问题讨论了何时在C++11中使类型不可move,我发现ScottMeyers在comp.std.c++上有类似的问题,下面列出的SG类类型在C++11库中是不可move的。所有互斥锁类型(recursive_mutex,timed_mutex,recursive_timed_mutex,条件变量类型信息error_categorylocale::facet随机设备种子序列reference_wrapper持续时间时间点-所有迭代器/迭代器适配器ios_basebasic_istream::sentrybasic_ostream::sentry所有原子类型once_flag问题