草庐IT

generic-derivation

全部标签

c++ - 文章 Generic<Programming> Typed Buffers 在 C++ 11 中是否完全过时?

我正在阅读GenericTypedBuffers,一篇来自AndreiAlexandrescu的相当古老的文章。我想知道它是否仍然有意义。在他的文章中,Alexandrescu指出了当性能至关重要时std::vector的一些问题:分配vector时不必要的数据初始化,我认为可以使用std::vector::reserve解决使用C++11和移动语义解决的昂贵移动操作大多数编译器不会通过使用std::memcpy和std为char等类型优化std::vector::memmove。现在对于主流编译器来说这是不正确的(据我所见)。指数级增长。您无法通过简单的方法调用来缩小std::vec

generics - Kotlin 泛型类型参数

源码如下funmain(args:Array){println("Hello,world!")valmutableIntList=mutableListOf(1,2,3)addInt(4,mutableIntList)//Nocompile-timeerroraddAnotherInt(5,mutableIntList)//Compile-timeerrorprintln(mutableIntList)}funaddInt(item:T,list:MutableList){list.add(item)}funaddAnotherInt(item:T,list:MutableList){

generics - Kotlin 泛型类型参数

源码如下funmain(args:Array){println("Hello,world!")valmutableIntList=mutableListOf(1,2,3)addInt(4,mutableIntList)//Nocompile-timeerroraddAnotherInt(5,mutableIntList)//Compile-timeerrorprintln(mutableIntList)}funaddInt(item:T,list:MutableList){list.add(item)}funaddAnotherInt(item:T,list:MutableList){

c++ - 警告 : overloaded virtual function "Base::process" is only partially overridden in class "derived"

我低于警告。我的部分代码是:classBase{public:virtualvoidprocess(intx){;};virtualvoidprocess(inta,floatb){;};protected:intpd;floatpb;};classderived:publicBase{public:voidprocess(inta,floatb);}voidderived::process(inta,floatb){pd=a;pb=b;....}我低于警告:Warning:overloadedvirtualfunction"Base::process"isonlypartiallyo

generics - Kotlin 中的逆变

我从来没有真正理解Java中的泛型,所以Kotlin似乎就是这种情况。考虑以下代码片段(这是一个人为的示例):classAnyComparator:Comparator{overridefuncompare(o1:Any,o2:Any):Int{TODO("notimplemented")}}funtest(){valx:Comparator=AnyComparator()//OK!valy:Comparator=AnyComparator()//Compilationerror}第二次分配失败并出现错误Typemismatch.Required:kotlin.ComparatorFo

generics - Kotlin 中的逆变

我从来没有真正理解Java中的泛型,所以Kotlin似乎就是这种情况。考虑以下代码片段(这是一个人为的示例):classAnyComparator:Comparator{overridefuncompare(o1:Any,o2:Any):Int{TODO("notimplemented")}}funtest(){valx:Comparator=AnyComparator()//OK!valy:Comparator=AnyComparator()//Compilationerror}第二次分配失败并出现错误Typemismatch.Required:kotlin.ComparatorFo

c++ - 为什么不能将 Base 类对象分配给 Derived 类对象?

派生类对象可以分配给C++中的基类对象。Derivedd;Baseb=d;//It'sOk但为什么不能将基类对象赋值给派生类对象呢?Baseb;Derivedd=b;//NotOk.Compilergiveanerror编辑:抱歉,这个问题实际上是在面试时被问到的。 最佳答案 继承是一种“is-a”关系,但它是单向。如果你有例如structBase{/*...*/};structDerived:Base{/*...*/};那么Derived是一个Base,但是Base不是Derived.这就是为什么您可以使用派生对象分配或初始化基类

c++ - 从 Derived** 到 Base*const* 的转换

请在链接parashift之前阅读我的问题,我可以谷歌搜索,这种情况略有不同。这是不允许的Child**cc;Base**bb=cc;因为你可以做到*bb=newOtherChild;但是如果我们有Child**cc;constBase*const*constbb=cc;我不认为所有这些常量对于我的示例都是必需的,但只是为了确定..我认为应该工作的最低限度是Base*const*bb=cc;那你不能这样做*bb=newOtherChild;所以应该是安全的。但为什么不允许呢? 最佳答案 你混淆了两种情况:添加const上行虽然形式上

c++ - 无法将 "member pointer to derived class"转换为 "member pointer to base class"

使用指向基类的指针调用类的虚成员函数当然是C++中非常常见的事情。所以我觉得很奇怪,当你有一个成员指针而不是一个普通指针时,似乎不可能做同样的事情。请考虑以下代码:structB{virtualvoidf();};structD:B{virtualvoidf();};structE{Bb;Dd;};intmain(){Ee;//Firstwithnormalpointers:B*pb1=&e.b;//OKB*pb2=&e.d;//OK,BisabaseofDpb1->f();//OK,callsB::f()pb2->f();//OK,callsD::f()//Nowwithmember

c++ - 是否存在将实际 Base 向下转换为 Derived 的情况?

在一般情况下,从(动态)Base向下转换到派生类之一Derived是(当之无愧的)未定义行为明显的UBclassBase{public:virtualvoidfoo(){/*doessomething*/ }inta;}classDerived:publicBase{public:virtualvoidfoo(){/*doessomethingdifferent*/ }doubleb;}Baseobj;DerivedderObj=*static_cast(&obj);//在目前编译器的实现方式中,这里显然至少会存在Vtable和b值不一致的问题,其中包含垃圾值。因此,标准没有定义这些条