草庐IT

复制集

全部标签

c++ - 有没有人发现需要声明一个复制赋值运算符的返回参数const?

复制赋值运算符具有通常的签名:my_class&operator=(my_classconst&rhs);下面的签名有实际用途吗?my_classconst&operator=(my_classconst&rhs);您只能定义其中之一,而不能同时定义两者。 最佳答案 使复制赋值的返回类型成为非常量引用的主要原因是它是标准中“可赋值”的要求。如果您将返回类型设为const引用,那么您的类将无法满足在任何标准库容器中使用的要求。 关于c++-有没有人发现需要声明一个复制赋值运算符的返回参数c

c++ - 使用 memcpy 将 std::vector 复制到 protobuf 的重复字段

起初我有这个简单的protobuf文件messagemessagetest{...repeatedfloatsamples=6;....}用这个方法创建一个头文件//repeatedfloatsamples=6;inlineintsamples_size()const;inlinevoidclear_samples();staticconstintkSamplesFieldNumber=6;inlinefloatsamples(intindex)const;inlinevoidset_samples(intindex,floatvalue);inlinevoidadd_samples(

c++ - 为什么复制构造函数的参数是引用而不是指针?

为什么拷贝构造函数的参数是引用而不是指针?为什么我们不能使用指针来代替? 最佳答案 有很多原因:引用不能为NULL。好的,可以创建NULL引用,但也可以转换std::vector*进入std::vector*.这并不意味着这样的转换具有定义的行为。创建NULL引用也不会。指针设置为NULL时具有定义的行为;引用没有。因此,引用总是指的是实际对象。变量和临时变量不能隐式转换为指向其类型的指针。出于显而易见的原因。我们不希望指向临时对象的指针到处乱跑,这就是标准明确禁止这样做的原因(至少当编译器可以告诉您正在这样做时)。但是我们可以引用

c++ - 异常切片 - 这是由于生成的复制构造函数造成的吗?

我刚刚修复了我们代码中一个非常微妙的错误,该错误是由异常切片引起的,现在我想确保我完全理解发生了什么。这是我们的异常基类、派生类和相关函数:classException{public://constructionException(intcode,constchar*format="",...);virtual~Exception(void);protected:private:intmCode;//throwersetsthischarmMessage[Exception::MessageLen];//throwersaysthisFIXME:useString};classDeri

c++ - 在 std::function 中存储不可复制但可移动的对象

假设我有一个不可复制但可移动的仿函数s,我如何将它存储在std::function中?即,如何编译以下代码?(使用gcc4.6)#include#includestructS{S()=default;S(Sconst&)=delete;S&operator=(Sconst&)=delete;S(S&&){}voidoperator()(){}};std::functionfunc;voidmake_func(){Ss;func=std::bind(std::move(s));//Thiswon'tcompile}intmain(){make_func();}

c++ - 编写函数以在 C++ 中复制链表

我需要实现一个名为copyList的辅助函数,它有一个参数,一个指向ListNode的指针。该函数需要返回一个指向原始链表拷贝的第一个节点的指针。因此,换句话说,我需要在C++中编写一个函数,该函数采用链表的头节点并复制整个链表,返回指向新头节点的指针。我需要帮助来实现这个功能,这就是我现在所拥有的。Listnode*SortedList::copyList(Listnode*L){Listnode*current=L;//holdsthecurrentnodeListnode*copy=newListnode;copy->next=NULL;//traversesthelistwhi

c++ - 复制对象时,带有 MSVC 2010 Debug 的 OpenMP 会生成奇怪的错误

我有一个相当复杂的程序,在MSVC2010Debug模式下使用OpenMP构建时会遇到奇怪的行为。我已尽力构建以下最小的工作示例(尽管它不是真正最小的),它缩小了真实程序的结构。#include#include//AclasstakepointstothewholecollectionandapositionOnlyallowaccess//totheelementsatthatposiiton.Itprovideread-onlyaccesstoquerysome//informationaboutthewholecollectionclassElement{public:Eleme

c++ - 我应该声明我的异常的复制构造函数 noexcept 吗?

在更有效的C++中,ScottMeyers说C++specifiesthatanobjectthrownasanexceptioniscopied.然后我想,如果复制构造函数依次抛出异常,std::terminate就会被调用,所以这是声明我所有异常的复制构造函数noexcept的一个很好的理由(而且,我想,不要抛出从堆中分配内存的对象,例如std::string)。然而我很惊讶地看到GCC4.7.1附带的标准库实现没有为std::bad_alloc和std::exception定义那些复制构造函数>。他们不应该定义它们noexcept吗? 最佳答案

c++ - STL 容器如何复制对象?

我知道像vector这样的STL容器会在添加对象时复制对象。push_back方法如下所示:voidpush_back(constT&x);我很惊讶地看到它将项目作为引用。我写了一个示例程序来查看它是如何工作的。structFoo{Foo(){std::coutfoos;foos.push_back(f);这会复制对象,我可以看到它正在调用copy-constructor。我的问题是,当push_back将item作为引用时,它是如何调用复制构造函数的?或者我在这里遗漏了什么?有什么想法..? 最佳答案 它可能使用“placemen

c++ - 为什么 C++ 中的分配器需要复制构造函数?

据说here这是因为异常规范。我不明白。这个问题跟异常规范有关系吗? 最佳答案 看完教程后,我对措辞有点困惑。但我相信它就这么简单:教程解释了为什么分配器的模板头显示allocator(constallocator&)throw();和templateallocator(constallocator&)throw();尽管复制构造函数对于分配器来说是相当无用的。答案是分配器的规范不允许构造函数抛出异常。因此,复制构造函数公共(public)接口(interface)定义了异常规范为throw()的复制构造函数。(不抛出任何异常)以防