草庐IT

fost-base

全部标签

c++ - GCC 中的 "empty base optimization"是否可配置?

考虑这些类型:structA{};structB:A{inti;};sizeof(A)>0按照标准要求。由于空基优化,sizeof(B)应为4。然而在GCC4.1.1上它是5(我在这个区域使用一包1)。并且不一致-我的一些文件得到了它,有些没有。还不能确定有什么区别,我们有一个很大的项目。在我使用的其他三个编译器(Microsoft和Freescale)上,我没有这个问题。根据thisarticle,空基优化显然是可选的.在GCC4.1.1中是否有编译器选项或pragma来调整它?我可以解决这个问题,但我想先了解发生了什么。我用Google搜索了一段时间,似乎找不到任何东西。

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

c++ - std::shared_ptr::owner_before 和 std::owner_less: "owner-based order"到底是什么意思?

我发现了一些关于此的讨论,但似乎没有任何内容明确说明“基于所有者的订单”到底是什么。它是否有效评估关于拥有的指针内存地址的值? 最佳答案 它定义了一个任意严格的弱排序,在该排序下,两个指针当且仅当它们共享所有权或均为空时才等效。等价以通常的方式定义:boolequivalent(p1,p2){return!p1.owner_before(p2)&&!p2.owner_before(p1);}这并不一定意味着它们指向同一个对象。两个指针可以指向不同的对象但仍然共享所有权:structthing{intn;};shared_ptrt1=

c++ - 参数包感知 std::is_base_of()

是否有可能静态断言作为模板参数提供的类型是否实现了参数包中列出的所有类型,即。参数包感知std::is_base_of()?templateclassCommonBase{static_assert(is_base_of::value,"Invalid.");^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^parameterpackawareversionofstd::is_base_of()public:templateT*as(){static_assert(std::is_base_of::value,"Invalid.");returnreinterpret

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

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

c++ - 多重继承 : unexpected result after cast from void * to 2nd base class

我的程序需要使用void*以便在动态调用情况下传输数据或对象,以便它可以引用任意类型的数据,甚至原始类型。但是,我最近发现,在具有多个基类的类的情况下向下转换这些void*的过程失败,甚至在调用这些向下转换的指针上的方法后我的程序崩溃,即使内存地址看起来是正确的。崩溃发生在访问“vtable”期间。所以我创建了一个小测试用例,环境是MacOSX上的gcc4.2:classShape{public:virtualintw()=0;virtualinth()=0;};classSquare:publicShape{public:intl;intw(){returnl;}inth(){ret

c++ - 错误 C2504 : base class undefined

我以前遇到过很多次这个错误,最终找到了解决办法,但这一次让我难住了。我有一个由“Player”类继承的“Mob”类。这是Mob.h:#pragmaonce#include"PlayState.h"#include"OmiGame/OmiGame.h"#include"resources.h"classPlayState;classMob{private:intframes;intwidth;intheight;inttime;sf::TexturetextureL;sf::TexturetextureR;AnimationanimationL;AnimationanimationR;A

c++ - 链接器错误 : wants C++ virtual base class destructor

我有一个链接错误,链接器提示说我的具体类的析构函数正在调用它的抽象父类(superclass)析构函数,而它的代码丢失了。这是在MacOSX上从XCode使用GCC4.2。我看到了g++undefinedreferencetotypeinfo但这并不完全相同。这是链接器错误消息:Undefinedsymbols:"ConnectionPool::~ConnectionPool()",referencedfrom:AlwaysConnectedConnectionZPool::~AlwaysConnectedConnectionZPool()inRKConnector.old:symbo

c++ - 为什么 std::ios_base::ignore() 设置 EOF 位?

当我从一个流中读取所有数据,但没有尝试读取到它的末尾时,流的EOF没有设置。这就是C++流的工作方式,对吧?这就是它起作用的原因:#include#includecharbuf[255];intmain(){std::stringstreamss("abcdef");ss.read(buf,6);assert(!ss.eof());assert(ss.tellg()==6);}但是,如果我ignore()而不是read()ing数据,EOF被设置:#include#includeintmain(){std::stringstreamss("abcdef");ss.ignore(6);a

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上行虽然形式上