classCHaraICICCC{inti;charc1;intj;charc2;charc3;charc4;};classCHaraIICCCC{inti;intj;charc1;charc2;charc3;charc4;};voidfun(){CHaraICICCCeici;CHaraIICCCCeiicc;inticic=sizeof(eici);//->outputoficicis16.intiicc=sizeof(eiicc);//->outputoficicis12.}如果有人知道,请告诉我为什么这样。谢谢原 最佳答案
我知道菱形继承会导致歧义,可以通过virtualBaseClasses使用继承来避免,问题不在于此。当类是多态时,问题是关于菱形层次结构中最派生类的大小。这是示例代码和示例输出:#includeusingnamespacestd;classBase{public:virtualvoiddoSomething(){}};classDerived1:publicvirtualBase{public:virtualvoiddoSomething(){}};classDerived2:publicvirtualBase{public:virtualvoiddoSomething(){}};cl
这个问题在这里已经有了答案:Howsizeof(array)worksatruntime?(6个答案)关闭8年前。sizeof运算符是一个编译时运算符,但在下面的程序中它会在运行时发生变化。#includevoidfunc(inti){inta[i];printf("%d\n",sizeof(a));}main(){inti=0;while(i内存将在运行时分配。编译器如何计算没有结构填充的结构大小?
我觉得sizeof(Base)应该是12,为什么是16?没有虚函数,我得到4和8。classBase{public:inti;virtualvoidPrint(){cout预期结果:12,16实际结果:16,16 最佳答案 whysizeof(Base)isnotdifferentofsizeof(Derived)因为编译器引入了对齐。这是架构相关的,但为了简单起见,我假设我们指的是64位架构。Scenario64bit/Clang8.0.类型的对齐Base是8字节数:alignOfBase():#@alignOfBase()mov
给定:templatestructval2size{charplaceholder[N];};是否可以保证sizeof(val2size)==N? 最佳答案 唯一的保证是sizeof(val2size)>=N在结构的末尾可能有未命名的填充。我不认为会有未命名的填充,但这是可能的。 关于c++-是否可以保证包含数组的类的大小?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3647
每次读取文件时,我都尝试使用不同长度的字节来读取二进制文件。获得值后,我尝试将字节转换为char*。我创建了一个简单的代码如下://ThiscodeiscompiledinVisualStudio2010typedefunsignedcharBYTE;BYTE*s;s=newBYTE[3];//Iread2bytesfromthefile,Iadd+1toreserveNULLs[0]='a';s[1]='b';s[2]=NULL;//justanexampleIget2bytesfromfilechar*b;b=newchar(sizeof(s));strcpy(b,(char*)s
我创建了包含整数和少数方法的简单对象,单独的整数原始变量并比较了它们的大小。“sizeof()”表示两个返回值“4”。为什么-复合类型的对象不应该占用更多空间并包含有关方法的信息?#includeclassPerson{private:inta;public:voidhello(){std::cout 最佳答案 方法(C++术语中的技术成员函数)不会影响对象的“大小”。如果你考虑一下,这是有道理的。成员函数适用于从类或其后代实例化的任何对象,并且在某种意义上独立于实例。您可以将某些虚构类Foo的成员函数视为声明为的独立函数retur
给定:boost::variant在编译时计算如下:max(sizeof(T1),sizeof(T2),sizeof(T3),...,sizeof(TN))我不知道如何解决这个问题,但是this答案阐明了我如何开始。使用该答案中的代码和两种类型,T1和T2,我可以在源文件中使用以下代码来获取较大对象的大小:size_tlargestSize=sizeof(largest::type);这正是我想要做的,但我需要最大的模板来处理两个以上的类——具体来说,它需要检查存储在中的所有类型boost::variant对象。我知道boost::variant有一个typestypedef,它定义了
我遇到了以下代码,它返回C样式数组的大小。templateintGetArraySize(Type(&array)[N]){(void)sizeof(0[array]);returnN;}模板部分似乎已经在thisquestion中解释过了。.但是,我仍然不明白sizeof行的用途是什么。有任何想法吗?有人建议这是为了避免未使用的变量警告,但可以使用更简单的#pragma,对吧?另外,这段代码在任何情况下都有效吗?没有任何限制吗? 最佳答案 我认为该行的目的是静默未使用的变量警告。更简单的方法是省略参数名称templateintGe
我在使用sizeof运算符(C++)时得到了意想不到的结果。在主课中,我有这些行double*arguments_=newdouble();*arguments_=2.1;*(arguments_+1)=3.45;cout这给我输出480Doublesize是8个字节,而且(sizeofarguments_[0])=8。但是,为什么(sizeofarguments_)也不是用字节表示的(2*8=16)?sizeof运算符是否适用 最佳答案 两个值都以相同的单位表示。你有一个32位系统,所以地址的大小是32位,或4个字节。在你的系统上