草庐IT

Move_uploaded_file

全部标签

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

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

c++ - 我们应该在何时、何地以及为什么使用 "BigObject&& rv = std::move(big_obj);"?

我的编译器是最新的VC++2013预览版。#includestructBigObject{...};voidf(BigObject&&){}voidf(BigObject&){}voidf(BigObject){}intmain(){BigObjectbig_obj;BigObject&r1=big_obj;//OK.BigObject&&r2=big_obj;//errorC2440BigObject&&r3=std::move(big_obj);//OK.BigObject&&r4=r3;//errorC2440f(r3);//errorC2668:'f':ambiguouscal

c++ - 尝试打开 COM 端口 C++ 时出现 FILE_NOT_FOUND

我正在尝试使用C++打开一个用于读写的com端口,但我似乎无法通过实际打开它的第一阶段。我在handle上得到一个INVALID_HANDLE_VALUE使用GetLastErrorFILE_NOT_FOUND。我在网上搜索了几天,我的想法很新鲜。我也在这个网站上搜索了所有关于COM的问题。我已经扫描了现有的端口(或者我相信是这样)以获得正确的端口名称。我还尝试了_T("COM1")与斜线、不带斜线、带冒号、不带冒号和不带_T的组合我在64位机器上使用Windows7。这是我得到的代码我很高兴对此有任何意见voidSendToCom(char*data,intlen){DWORDcbN

c++ - 试图从 __FILE__ 中剥离项目路径

以下代码(main.cpp):#include#includestd::vectorsplit(std::stringhaystack,constcharlimiter){std::vectorreturn_value;while(haystack.find(limiter)!=std::string::npos){return_value.push_back(haystack.substr(0,haystack.find(limiter)));haystack=haystack.substr(haystack.find(limiter)+1);}return_value.push_b

c++ - move 哪个 throw ?

据我了解,move构造函数和move赋值必须标记为noexcept,以便编译器在例如在vector内部重新分配时使用它们。但是,是否存在move分配、move构造可能实际抛出的真实案例?更新:例如,在构造时具有分配资源的类不能是不可抛出的。 最佳答案 However,isthereanyreal-worldcasewhereamove-assign,move-construct(orswap)mightactuallythrow?是的。考虑std::list的实现.end迭代器必须指向列表中的“最后一个元素”。存在std::list

c++ - 将 C++11 move 语义应用于绑定(bind)函数

我有一些现有的C++98代码,它们使用boost::function和boost:bind进行异步回调。一些相关的简化代码片段包括:typedefboost::functionWriteHandler;structWriteOperation{WriteOperation(constboost::shared_ptr&device,conststd::string&data,constWriteHandler&handler):m_Device(device),m_Data(data),m_Handler(handler){}private:boost::shared_ptrm_Dev

c++ - 在没有 move 构造函数的情况下返回不可复制对象的解决方法

在我的API中,我有一个返回std::istringstream的函数.std::istringstreamclass是不可复制的,但支持move,因此在符合标准的编译器上返回本地没有问题std::istringstream.但是,在gcc4.9上,有nosupportmovestd::istringstream.有没有我可以使用的解决方法std::istringstream无需从用户的角度更改API?建议的解决方法here,使用unique_ptr将改变API的语义。 最佳答案 如果你不能movestd::istringstrea

c++ - cpplint.py 和 cmake : how to specify include files

假设我有一个目录结构如下的项目:myproject├──.git[...]├──CMakeLists.txt└──src├──CMakeLists.txt├──foo.cc└──foo.h如果在src/foo.cc中,我包含像#include"foo.h"这样的头文件,然后运行​​Google的cpplint.py在它上面,它提示src/foo.cc:8:Includethedirectorywhennaming.hfiles[build/include][4]所以我将它包含为#include"./foo.h"。现在我收到另一个投诉:src/foo.cc:8:src/foo.ccsho

c++ - vector 增长时如何强制执行 move 语义?

我有一个std::vector对象的某个类A。该类非常重要,并且定义了复制构造函数和move构造函数。std::vectormyvec;如果我用A对象填充vector(使用例如myvec.push_back(a)),vector的大小会增加,使用复制构造函数A(constA&)实例化vector中元素的新拷贝。我能否以某种方式强制开始使用类A的move构造函数? 最佳答案 您需要使用noexcept通知C++(特别是std::vector)您的move构造函数和析构函数不会抛出异常。然后move构造函数将在vector增长时被调用。

c++ - 双参数和 move 语义

假设我有以下foo函数:Widgetfoo(Widgetlhs,Widgetrhs){returnlhs.bar(rhs);}然后我想在两边使用相同的参数:Widgetbaz(Widgetw){returnfoo(w,w);}碰巧Widget很大,我想避免复制太多。假设bar就位,我可以执行以下操作:Widgetbaz(Widgetw){returnfoo(std::move(w),w);}这只会制作一份拷贝。但我担心这是不正确的代码,因为参数传递顺序在C++中未指定,我可能会给出一个移出的参数。我改为执行以下操作:Widgetbaz(Widgetw){Widgetw_bis(w);r