草庐IT

virtual-copy

全部标签

c++ - C++ 中的 "As a rule of thumb, make all your methods virtual"- 合理的建议?

我只是偶然看到了标题中的陈述。完整的报价是:Asaruleofthumb,makeallyourmethodsvirtual(includingthedestructor,butnotconstructors)toavoidproblemsassociatedwithomissionofthevirtualkeyword.我在Wrox的书ProfessionalC++中找到了这个。Youcangoogleittocheck.这有什么关系吗?我原以为您只会提供选择的扩展点,而不是默认的可扩展性。例如,a2001articlebyHerbSuttersaysso.从那以后,有什么发生了巨大

c++ - Arduino C++ 代码 : can you use virtual functions and exceptions?

跟进thiscomment来自问题Writingfirmware:assemblyorhighlevel?:为Arduino编译C++代码时平台,可以使用虚函数、异常等吗?或者您想(必须)使用C++的一个子集(如thecomment中所述)?为Arduino平台编程时还有其他注意事项吗? 最佳答案 Arduino环境使用GCC工具链的AVR版本。代码编译为C++,因此您可以使用类。虚拟功能是可能的;vtables将存储在.data部分并具有正确的地址。事实上,Print基类使用虚函数来使各种“打印”方法适应不同的输出类型。由于代码空

C++20 constexpr std::copy 运行时优化

cppreference.com说:Inpractice,implementationsofstd::copyavoidmultipleassignmentsandusebulkcopyfunctionssuchasstd::memmoveifthevaluetypeisTriviallyCopyable但是,该页面还指出,从C++20开始,不采用执行策略的重载将是constexpr。标准会禁止这些运行时优化(因为std::memmove不是constexpr)还是有办法为运行时优化constexpr函数? 最佳答案 我们也可以吃蛋

c++ - C++ 中的 AI 应用程序 : How coSTLy are virtual functions? 有哪些可能的优化?

在我用C++编写的AI应用程序中,没有太多的数值计算有很多结构需要运行时多态性在计算过程中,多个多态结构经常会相互作用在这种情况下,有没有什么优化技术?虽然我现在不关心优化应用程序,但为项目选择C++而不是Java的一个方面是能够更多地利用优化和能够使用非面向对象的方法(模板、过程、重载)。具体来说,与虚函数相关的优化技术有哪些?虚函数是通过内存中的虚表实现的。有没有办法将这些虚拟表预取到二级缓存(从内存/二级缓存中获取的成本正在增加)?除此之外,C++中的数据局部性技术是否有很好的引用资料?这些技术将减少计算所需的数据提取到L2缓存的等待时间。更新:另见以下相关论坛:Performa

C++ : Implementing copy constructor and copy assignment operator

在阅读了C++中的复制构造函数和复制赋值运算符之后,我尝试创建一个简单的示例。虽然下面的代码片段显然有效,但我不确定我是否以正确的方式实现了复制构造函数和复制赋值运算符。您能否指出是否有任何错误/改进或更好的示例来理解相关概念。classFoobase{intbInt;public:Foobase(){}Foobase(intb){bInt=b;}intGetValue(){returnbInt;}intSetValue(constint&val){bInt=val;}};classFoobar{intvar;Foobase*base;public:Foobar(){}Foobar(i

c++ - OpenCV/C++ : Copying a row/column in a Mat to another?

我知道我可以通过自己复制每个元素来做到这一点,但是有没有一种方法可以为我做到这一点?我试过mat2.copyTo(mat1.row(0))但这不起作用。 最佳答案 试试Matmat1row=mat1.row(0);mat2.copyTo(mat1row);(假设mat2与目标行的大小相同)。这应该可以完成工作并且更清晰。编辑:这更短,官方文档推荐:A.row(j).copyTo(A.row(i));在官方文档中有更多详细信息:http://docs.opencv.org/modules/core/doc/basic_structur

c++ - 在派生类中使用 'virtual'

我最近看到派生类中的代码,其中程序员将virtual放在重写的函数前面。这很常见吗?我觉得这很奇怪,有点让我措手不及。编辑:我不是在问virtual做什么,我是在问为什么有人会将virtual放在已经在其基类中覆盖虚函数的派生类中。前:classB{public:virtualvoidfoo();....};classD:publicB{public:virtualvoidfoo();//couldhavejustputvoidfoo();...}; 最佳答案 virtual是最高(最少派生)级别的可覆盖函数所必需的。它是可选的,但

c++ - 如何使用 std::copy 将一张 map 复制到另一张 map 中?

我想将一个std::map的内容复制到另一个。我可以使用std::copy为了那个原因?显然,下面的代码是行不通的:intmain(){typedefstd::mapMap;Mapm1;m1[3]=0.3;m1[5]=0.5;Mapm2;m2[1]=0.1;std::copy(m1.begin(),m1.end(),m2.begin());return0;}这行不通,因为copy将调用operator*在m2.begin()“取消引用”它并分配一个值(所有值的类型都是std::pair)。然后它会调用operator++移动到m2中的下一个空格.由于const,这两个操作都不起作用在c

c++ - 为什么 std::copy_n 不增加输入迭代器 n 次?

我希望下面的buf_iter指向字符n字符在它开始的点之后。相反,它指向最后一个读取的字符。为什么是这样?即,如果我在copy_n之前和之后执行in_stream.tellg(),它们的区别不是n而是(n-1)。如果我用in_stream.read读取了n个字符,那么该位置将前进n。std::istreambuf_iteratorbuf_iter(in_stream);std::copy_n(buf_iter,n,sym.begin());我查看了实现,它显然是故意这样做的,跳过了最后的增量。另一篇文章here提到当从迭代器连接到cin时递增它会导致读取次数过多,因为读取是在opera

C++ "Virtual functions but no virtual destructors"

我有一个基类Media和几个派生类,即DVD、Book等...基类写成:classMedia{private:intid;stringtitle;intyear;public:Media(){id=year=0;title="";}Media(int_id,string_title,int_year):id(_id),title(_title),year(_year){}//virtual~Media()=0;voidchangeID(intnewID){id=newID;}virtualvoidprint(ostream&out);};问题是:没有析构函数,GCC给了我一堆警告cla