草庐IT

work_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++ - 通过无效指针访问静态成员 : guaranteed to "work"?

这个问题在这里已经有了答案:C++staticconstaccessthroughaNULLpointer[duplicate](5个答案)关闭8年前。设置给定这个用户定义的类型:structT{staticintx;inty;T():y(38);};并将必要的定义放在有用的地方:intT::x=42;以下是将int的值流式传输到stdout的规范方法:std::cout控制同时,由于T的实例不存在,以下内容(当然)无效:T*ptr=NULL;//sameifleftuninitialisedstd::couty;问题现在考虑以下可怕、邪恶和糟糕的代码:T*ptr=NULL;std::

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++ 范围-v3 库 : 'take' -ing first 3 perfect numbers works and halts; 'take' -ing first 4 doesn't stop after 4

据我了解,range-v3库的View操作(目前需要C++17,但要成为C++20中STL的正式部分)提供了可链接的类STL算法,这些算法是延迟计算的。作为实验,我创建了以下代码来评估前4个完全数:#include#includeusingnamespacestd;intmain(intargc,char*argv[]){autoperfects=ranges::view::ints(1)|ranges::view::filter([](intx){intpsum=0;for(inty=1;y代码以可能无限范围的数字开始(ranges::view::ints(1)),但是因为View算

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++ - 为什么在 C++ 中通过空指针 "work"调用方法?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:CallingclassmethodthroughNULLclasspointer#includeusingnamespacestd;classtest{inti;public:test():i(0){coutshow();return0;}很明显,不会调用任何构造函数。这是标准吗?或者只是一些编译器优化,因为这个指针没有在show()成员函数中使用?