草庐IT

move_group

全部标签

c++ - 空范围的 std::copy() 或 std::move() 是否需要有效目的地?

下面代码中的std::move()在VisualStudio2013(使用Debug配置)中编译时发出运行时警告,因为它检测到dest是一个空指针。但是,源范围是空的,因此永远不应访问dest。C++标准可能不清楚这是否应该被允许?它声明:要求:结果不得在[first,last]范围内。nullptr似乎可以满足该要求。#include#includeintmain(){std::vectorvec;int*dest=nullptr;//Therange[begin(vec),end(vec))isempty,sodestshouldneverbeaccessed.//However,

C++ OpenCV : tracking moving people on the street

我正在尝试使用C++中的OpenCV对移动的人员进行跟踪,用一个摄像头看着街道,然后人们在街道上移动。对于我拍摄并正在使用的示例视频,请参见此处:http://akos.maroy.hu/~akos/eszesp/MVI_0778.MOV我仔细阅读了这个主题,并尝试了很多方法,包括:背景检测和创建轮廓尝试检测Blob(Blob的关键点)使用HOGDescriptor对每个帧使用人员检测器但是这些都没有提供好的结果。对于我的示例代码,请参见下文。有关基于上述视频的代码输出,请参阅:http://akos.maroy.hu/~akos/eszesp/ize.avi.背景检测到的轮廓为红色,

c++ - 为什么我们需要在 move 构造函数中将右值引用设置为空?

//codefromhttps://skillsmatter.com/skillscasts/2188-move-semanticsperfect-forwarding-and-rvalue-referencesclassWidget{public:Widget(Widget&&rhs):pds(rhs.pds)//takesource’svalue{rhs.pds=nullptr;//why??}private:structDataStructure;DataStructure*pds;};我无法理解将rhd.pds设置为nullptr的原因。如果我们删除这一行会发生什么:rhs.p

c++ - std::move 在类模板中的构造函数初始值设定项列表中

我有一个这样的模板:templatestructfoo{Tm_t;foo(Tt):m_t(t){}};问题是我想为T支持小型/常规类型和大型类型(如矩阵)。你推荐我这样写构造函数初始化列表吗foo(Tt):m_t(std::move(t)){}并要求T类型始终支持move构造,即使对于较小的类型也是如此?有没有更好的方法? 最佳答案 andrequirethatthetypeTalwayssupportmoveconstruction,evenforsmallertypes?任何可复制构造的类型也可move构造。在这些情况下move

c++ - 右值引用 : Why aren't rvalues implicitly moved?

在关于C++右值引用(http://www.artima.com/cppsource/rvalue.html)的Artima文章中有这样的话:这就是为什么在向下传递到基类时必须说move(x)而不是只说x的原因。这是移动语义的一个关键安全特性,旨在防止从某个命名变量意外移动两次。我想不出这样的双招可以执行的情况。你能举个例子吗?换句话说,如果T&&的所有成员都是右值引用而不仅仅是引用,会出现什么问题? 最佳答案 考虑这个场景:voidfoo(std::stringx){}voidbar(std::stringy){}voidtest

C++11:使用 std::move 只对临时对象安全吗?

在我的代码中,我有这样的东西:unordered_multimap>mEntities;...vector>rawEntities;if(qi::phrase_parse(&buf[0],(&buf[0])+buf.size(),EntityParser(),qi::space,rawEntities)){for(auto&propGroup:rawEntities){autosearch=propGroup.find("classname");if(search!=propGroup.end()){//isstealingpropGroupsafe???mEntities.empla

c++ - 为什么可以 move 不可变的 lambda 捕获?

AFAIK非可变lambda将变量捕获为常量。这让我想知道为什么他们还能被感动?autop=std::make_unique(0);autof=[p=std::move(p)](){p->reset();};//Error,pisconstautof2=std::move(f);//OK,thepointerstoredinsidelambdaismoved 最佳答案 AFAIKnon-mutablelambdascapturevariablesasconst.不,他们没有。它们的operator()重载是const。实际的成员变量

c++ - std::move 和 unique_ptr::reset 之间有什么区别?

对于std::unique_ptr的p1和p2,std::move()有什么区别>和std::unique_ptr::reset()?p1=std::move(p2);p1.reset(p2.release()); 最佳答案 根据[unique.ptr.single.assign]/2中移动分配的标准规范,答案应该是显而易见的:Effects:Transfersownershipfromuto*thisasifbycallingreset(u.release())followedbyanassignmentfromstd::forw

c++ - 对于可 move 类型,删除 std::vector 中间的元素仍然很昂贵吗?

通常认为删除std::vector中间的元素代价高昂,因为它需要复制它之后的每个元素来填充空洞。在C++11中,std::vector将向下move所有元素,这应该非常快(如果仅与拷贝相关),至少我是这么认为的。当然,它在时间上仍然是线性的,但总的来说它应该比旧版本更快。这是真的吗?我再也不用担心删除中间的某些对象了吗? 最佳答案 这取决于vector中的内容。如果它是POD或指针,我无法想象它会有什么不同。如果类实例复制起来很繁重,但可以非常快速地move,我希望使用C++0x可以加速。但是,我认为如果从std::vectors中

c++ - move 语义 - 它是关于什么的?

这个问题在这里已经有了答案:10年前关闭。PossibleDuplicate:Cansomeonepleaseexplainmovesemanticstome?有人可以给我指出一个好的来源或在这里解释什么是move语义? 最佳答案 暂时忘记C++0x。move语义是独立于语言的东西——C++0x仅仅提供了一种标准方式来执行move语义操作。定义move语义定义了某些操作的行为。大多数情况下,它们与复制语义形成对比,因此首先定义它们会很有用。与的分配复制语义具有以下行为://Copysemanticsassert(b==c);a=b;