草庐IT

copy-constructor

全部标签

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

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

c++ - 为什么 std::copy_if 签名不约束谓词类型

假设我们有以下情况:structA{inti;};structB{Aa;intother_things;};boolpredicate(constA&a){returna.i>123;}boolpredicate(constB&b){returnpredicate(b.a);}intmain(){std::vectora_source;std::vectorb_source;std::vectora_target;std::vectorb_target;std::copy_if(a_source.begin(),a_source.end(),std::back_inserter(a_t

c++ - 删除复制构造函数会破坏继承的构造函数

我正在尝试使用C++11的构造函数继承功能。以下片段(从某处复制,我不记得从哪里复制了)完全可以正常工作:#includestructBase{Base():Base(0){}Base(inta):Base(a,0){}Base(inta,doubleb){std::cout也就是直到添加了注释标记的行;因为那时一切都乱套了:>g++-std=c++11-otesttest.cpptest.cpp:Infunction‘intmain(int,char**)’:test.cpp:18:11:error:nomatchingfunctionforcallto‘Derived::Deriv

c++ - 临时对象需要复制构造函数

以下代码仅在复制构造函数可用时有效。当我添加打印语句(通过std::cout)并使复制构造函数可用时,它没有被使用(我假设有这样的编译器技巧正在发生以删除不必要的拷贝)。但是在这两个输出中operator和函数plop()下面(我创建临时对象的地方)我看不到复制构造函数的必要性。有人可以解释为什么当我通过const引用传递所有内容时语言需要它(或者我做错了什么)。#includeclassN{public:N(int){}private:N(Nconst&);};std::ostream&operator编译器:[Alpha:~/X]myork%g++-vUsingbuilt-insp

c++ - :className() mean in a constructor for className? 是什么

我在我正在处理的代码库中看到一些代码如下:ZfooName::ZfooName(intmagoo):ZfooName(){fGoo=magoo;}我假设这是一个C++11功能,因为它在VS2012中中断,但这是什么意思? 最佳答案 这是C++11中的新特性。它称为委托(delegate)构造函数。构造函数首先调用默认构造函数(被委托(delegate)给的构造函数)。默认构造函数返回后,执行委托(delegate)构造函数的主体。参见http://www.stroustrup.com/C++11FAQ.html#delegating

c++ - 为什么在这种情况下不调用复制构造函数?

这是一小段代码:classA{public:A(intvalue):value_(value){cout我假设输出将是“常规构造函数”(对于RHS),然后是对于LHS的“复制构造函数”。所以我避免了这种风格,总是将类的变量声明为Aa(5);。但令我惊讶的是,上面的代码从未调用复制构造函数(VisualC++2008)有人知道这种行为是编译器优化的结果,还是C++的某些已记录(和可移植)功能的结果?谢谢。 最佳答案 来自另一条评论:“所以默认情况下我不应该依赖它(因为它可能取决于编译器)”不,它实际上不依赖于编译器。任何值得一试的编译

具有 shared_ptr 成员的 C++ 复制构造函数

来自cplusplus.com:Rarelyyouwillcomeacrossaclassthatdoesnotcontainrawpointersyetthedefaultcopyconstructorisnotsufficient.Anexampleofthisiswhenyouhaveareference-countedobject.boost::shared_ptrisexample.有人可以详细说明一下吗?如果我们有一个包含boost::shared_ptr的类,当该类被复制构造时,不会得到复制构造-因此shared_ptr构造函数不会执行正确的事情并增加引用计数?例如,以下

c++ std::copy 类型转换为派生类可能吗?

我很确定没有办法明确地做到这一点,但我还是想问一下,以防万一有更好的方法。我有一个基类A和一个派生类B,现在我有一个指向B*的A*std::list,我想将这个A*列表复制到B的std::vector*基本上我想这样做:std::listaList=someObject.getAs();std::vectorbVec=std::vector(aList.begin(),aList.end());我很确定当列表和vector是相同类型时(例如,都是A*的)这应该可以编译,但是因为在这种情况下A*是B*的基类,所以我不能这样做这样,因为我必须像这样显式地进行类型转换:std::listaL

c++ - 编译器生成的构造函数

这个问题在这里已经有了答案:Conditionsforautomaticgenerationofdefault/copy/movectorandcopy/moveassignmentoperator?(3个答案)关闭5年前。这只是一个快速问题,用于正确理解当您使用这样的构造函数创建类时会发生什么:classA{public:A(){}};我知道没有生成默认构造函数,因为它已经定义但是是由编译器生成的复制和赋值构造函数,或者换句话说我需要声明私有(private)复制构造函数和私有(private)赋值运算符以防止这种情况发生?classA{private://neededtopreve

Windows 批处理 : Unicode parameters for (robo) copy command

我需要在一个批处理文件中复制多个文件。这些文件具有映射到不同代码页的Unicode名称。示例:setArabicFile=ڊڌڵڲڛشسsetCyrillicFile=щЖЛдЉиsetGermanFile=Büchercopy%ArabicFile%SomePlaceElsecopy%CyrillicFile%SomePlaceElsecopy%GermanFile%SomePlaceElse问题:批处理文件不能是Unicode。问题:如何将Unicode文件名写入批处理文件以便复制命令识别它们?注意事项:我不关心文件名如何显示。实际上批处理文件不仅仅是复制这些文件,我只是简化了描述