草庐IT

c++ - 将静态类成员复制到局部变量进行优化

在浏览开源代码(来自OpenCV)时,我在一个方法中发现了以下类型的代码://copyclassmembertolocalvariableforoptimizationintfoo=_foo;//where_fooisaclassmemberfor(...)//aheavyloopthatmakesuseoffoo来自anotherquestion所以我得出结论,关于是否这实际上需要完成或由编译器自动完成的答案可能取决于编译器/设置。我的问题是,如果_foo是一个static类成员,是否会有任何不同?这种手动优化是否还有意义,或者访问静态类成员并不比访问局部变量更“昂贵”?附言-我问是

使用tf.tile复制张量

我当前的张量具有(3,2)的形状,例如[[1.2.][2.1.][-2.-1.]]我想扩展到(1、3、2)的形状,每个二维的复制品的整个张量,例如,例如,[[[1.2.][2.1.][-2.-1.]][[1.2.][2.1.][-2.-1.]][[1.2.][2.1.][-2.-1.]]]我尝试了填充代码,但仅复制每一行。tiled_vecs=tf.tile(tf.expand_dims(input_vecs,1),[1,3,1])结果是[[[1.2.][1.2.][1.2.]][[2.1.][2.1.][2.1.]][[-2.-1.][-2.-1.][-2.-1.]]]看答案这应该有效,tf

c++ - 防止在复制构造函数中切片

我想复制Foo对象类型的vector,但对象可以是Foo的几种不同派生类型。我无法弄清楚如何在不切片的情况下进行复制。这是我的玩具代码#include"stdafx.h"#include#include#include#includeclassFoo{public:Foo(){m_x="abc";}Foo(constFoo&other){m_x=other.m_x;}virtualstd::stringToString(){returnm_x;}std::stringm_x;};classFooDerivedA:publicFoo{public:FooDerivedA():Foo(){

c++ - 为简单结构定义哪个复制/move 构造函数/运算符?

我的程序使用一个简单的结构Rect定义为structRect{intx1,y1,x2,y2;Rect():x1(0),y1(0),x2(0),y2(0){}Rect(intx1,inty1,intx2,inty2):x1(x1),y1(y1),x2(x2),y2(y2){}};我应该定义复制/move构造函数或赋值运算符,还是可以依靠编译器自动生成它们?问题与速度和使用原因有关(例如,move构造函数会影响程序执行速度)。构造函数和运算符是非常重复的工作,如果能依靠编译器自动生成就好了。Rect(constRect&r):x1(r.x1),y1(r.y1),x2(r.x2),y2(r.

c++ - 为具有 shared_ptr 数据成员的类复制构造函数?

我知道当类中有原始指针数据成员时如何编写复制构造函数,但是当使用shared_ptr管理它们时如何编写复制构造函数?是否有应该调用的copy()或clone()函数?有趣的是,我从未见过这样的例子。 最佳答案 std::shared_ptr的拷贝构造函数创建与第一个指针共享所有权的第二个指针。当所有std::shared_ptr时,指针将被销毁指向它的那一点被摧毁。如果没有显式声明复制构造函数,语言规范会规定将隐式提供合适的复制构造函数,并且它将调用类中每个成员的复制构造函数。因此,换句话说,为您的类提供的隐式复制构造函数将调用sh

c++ - 这个复制构造函数是个坏主意吗?

所以,我觉得这是个坏主意:classFoo{public:Foo(constFoo&from){memcpy(this,&from,sizeof(Foo));m_someData=newint[m_dataLength];memcpy(m_someData,from.m_someData,m_dataLength*sizeof(int));}private:int*m_someData;intm_dataLength;};问题是:为什么?如果memcpy参数类型(和大小)相同,布局相同,哪里不好?我看到的一个潜在问题是是否存在string或vector字段,但我不确定这是否是一个有效的

c++ - C++ 中是否有一种机制可以在没有动态内存分配的情况下从基类指针复制派生类的完整拷贝?

考虑以下示例,其中对象切片发生在基指针的取消引用期间。#includeclassBase{public:virtualvoidhello(){printf("helloworldfrombase\n");}};classDerived:publicBase{public:virtualvoidhello(){printf("helloworldfromderived\n");}};intmain(){Base*ptrToDerived=newDerived;autod=*ptrToDerived;d.hello();}我希望变量d保存类型为Derived的对象,而不是类型为Base的对

c++ - 使用智能指针编写安全的复制构造函数

我想弄清楚是否有可能在std::unique_ptr的帮助下编写一个安全的复制构造函数里面。这是我的代码:#include#includeclassA{public:A():_a(10){std::cerr_a(newA(*tmp.a));std::unique_ptr_b(newB(*tmp.b));a=_a.release();b=_b.release();}~C(){std::cerr这段代码的输出:A()constructorB()constructorC()constructorC()copyconstructorA()copyconstructorB()copyconstr

c++ - 使用 std::enable_if 保护复制构造函数

我编写了一个类来促进具有以下构造函数的类型删除:classEnvelope{public:Envelope(){}templateEnvelope(Runnablerunnable):m_runFunc(&Envelope::RunAndDeleteRunnable),m_runnable(newRunnable(runnable)){}templateEnvelope(Runnable*runnable):m_runFunc(&Envelope::RunRunnable),m_runnable(runnable){}};我想重写第一个非默认构造函数以获取引用而不是值(Runnable

c++ - 是否允许复制/移动省略以使使用已删除函数的程序格式正确?

考虑以下代码:#includestructThing{Thing(void){std::cout我希望Thingthing{Thing{}};语句表示使用默认构造函数构造Thing类的临时对象并构造thingThing类的对象使用刚刚创建的临时对象作为参数的移动构造函数。我希望这个程序被认为是错误的,因为它包含对已删除移动构造函数的调用,即使它可能被省略。标准的class.copy.elision部分似乎也要求这样做:theselectedconstructormustbeaccessibleevenifthecalliselidedWordingforguaranteedcopyel