草庐IT

c++ - C++ 中的多重声明

在[basic.scope.declarative]p4中,阅读Givenasetofdeclarationsinasingledeclarativeregion,eachofwhichspecifiesthesameunqualifiedname,—(4.1)theyshallallrefertothesameentity…天真的阅读可能意味着以下代码可能是有效的,因为“两个声明都引用同一个实体”:intx;intx;然后人们可能会记得一个定义规则[basic.def.odr]p1。上述推理可能仅适用于声明而不适用于定义。[basic.def]p2中详细说明了区别。例如下面的代码肯定

c++ - C++11 中的可变参数模板和多重继承

我正在努力实现这样的目标:我有一个模板化的基类,我想动态继承它templateclassfooBase{public:fooBase(){};~fooBase(){};};期望的方法:(像这样,不太确定该怎么做)templateclassfoo:publicInterfaces...{public:foo();~foo();}我的目标是让foo类像这样:第二种方法:classfoo():publicfooBase,publicfooBase,publicfooBase//andthelistcouldgoon{foo();~foo();}使用第二种方法的问题是,如果我实例化一个foo对

c++ - C++ 中模板化异常类的多重继承

这个问题在这里已经有了答案:Exceptionmultipleinheritance(1个回答)关闭4年前。为什么:#includestructbase_exc:std::runtime_error{base_exc(conststd::string&s):std::runtime_error(("base_exc:"+s).c_str()){}};structderived_exc1:base_exc{derived_exc1(conststd::string&s):base_exc(("derived_exc1:"+s).c_str()){}};structderived_exc2

c++ - 多重继承是编译器编写者的问题吗? -C++

我一直在阅读有关多重继承的内容Whatistheexactproblemwithmultipleinheritance?http://en.wikipedia.org/wiki/Diamond_problemhttp://en.wikipedia.org/wiki/Virtual_inheritancehttp://en.wikipedia.org/wiki/Multiple_inheritance但是由于在解决歧义之前代码不会编译,这不会使多重继承成为编译器编写者的唯一问题吗?-如果我不想编写编译器代码,这个问题对我有何影响 最佳答案

c++ - main : linking fortran with C++的多重定义

我想编写一个C++程序,从中调用mvndst_()子例程http://www.math.wsu.edu/faculty/genz/software/fort77/mvndstpack.f在Linux上,如果我创建test.cc:extern"C"{intmvndst_(int*,double*,double*,int*,double*,int*,double*,double*,double*,double*,int*);};intmain(){return0;}并编译通过g++-c-otest.otest.ccgfortran-c-omvndstpack.omvndstpack.fgf

c++ - 多重虚继承是否像虚函数的继承那样涉及后期绑定(bind)?

与继承虚函数不同,解决虚继承问题似乎很简单,但也许我只是不够有创意(狡猾?)。虚继承与虚函数的继承有关系吗?具体来说,虚拟继承是否会导致后期绑定(bind)?我看不出任何原因。我只是因为关键字过载而怀疑。我意识到标准没有指定虚拟继承的实现。我对大多数非假设机器所做的任何事情都很感兴趣,无论它有多么不完美。 最佳答案 正如虚函数涉及那些成员函数的后期绑定(bind),我想你可以说虚拟继承涉及继承数据成员的后期绑定(bind)。每个子类的内存布局可能完全不同,因此没有运行时类型信息就无法解析像baseClassInstance->dat

c++ - 多重继承情况下的执行顺序

classA:publicB,publicC{};在这种情况下执行顺序是:B();//base(first)C();//base(second)A();//derivedclassA:publicB,virtualpublicC{};但在这种情况下,当我在继承时用类c编写虚拟时,顺序为//executionbecomes:C();//virtualbaseB();//ordinarybaseA();//derived我在某处读到调用构造函数的顺序取决于继承多个类时声明的顺序但是执行顺序如何在用类编写虚拟时发生变化。我不明白为什么我会得到这样的结果. 最佳答案

c++ - 当类的多重继承本身在其层次结构中具有菱形继承时,功能继承不明确

文字描述(下面的代码):我有一个提供类集合的库。对于每组类,我们有两个具体类型,(ClassA_Partial,ClassA),(ClassB_Partial,ClassB)等。这些分别实现(Interface_Partial、Interface)。此外,Interface是一个Interface_Partial并且每个Class?是一个Class?_Partial-创建一个菱形继承模式,其中顶部是虚拟继承的。为什么在同时继承ClassA和ClassB时,Interface_Partial函数不明确?structInterface_Partial{virtual~Interface_P

c++ - 通过使用范围解析避免多重继承引起的歧义

这是一个多重继承的例子。我使用范围解析运算符而不是虚拟类来解决歧义。structA{inti;};structB:A{};structC:A{};structD:B,C{voidf(){B::i=10;}voidg(){std::coutB::i是否合式? 最佳答案 IsB::iwell-formed?是的,是的。最相关的引用是[class.qual]/1:Ifthenested-name-specifierofaqualified-idnominatesaclass,thenamespecifiedafterthenested-n

C++ 多重继承和向上转换的智能指针销毁导致 VS 2017 中的堆损坏

我在使用上面的代码时遇到了VS调试器的问题:classAnimal{public:};classStupid{public:};classDog:publicStupid,publicAnimal{public:};intmain(){std::unique_ptranimal=std::unique_ptr(newDog());animal.reset();return0;}此代码在执行涉及“ntdl.dll”和“wntdll.pdb”的“animal.reset()”后抛出错误。如果我点击“忽略”多次(3)次,以下是MSVC运行时库生成断言失败的表达式:1-_CrtIsValidH