草庐IT

c++ - C 和 C++ 中的 sizeof 结构或变量

我不明白为什么这段代码在C中打印1,而在C++中打印其他数字?#includestaticcharT='a';intmain(intargc,char**argv){structT{charX[2];};printf("sizeofTis%zu\n",sizeof(T));}为什么这段代码在C和C++中都打印1?#includeintmain(intargc,char**argv){staticcharT='a';structT{charX[2];};printf("sizeofTis%zu\n",sizeof(T));}有人可以稍微解释一下吗? 最佳答案

c++ - C/C++中sizeof()的机制是什么?

sizeof好像不是真正的函数?例如,如果你这样写:inti=0;printf("%d\n",sizeof(++i));printf("%d\n",i);您可能会得到如下输出:40当你深入研究汇编代码时,你会发现这样的东西:movl$4,%esileaqLC0(%rip),%rdixorl%eax,%eaxcall_printf所以,编译器直接把常量“4”作为printfadd的参数调用它。那么sizeof是做什么的呢? 最佳答案 你知道,有standarddocuments(3.8MBPDF)是有原因的;C99,第6.5.3.4节

c++ - 将默认构造函数添加到基类会更改派生类型的 sizeof()

这个问题在这里已经有了答案:Whenextendingapaddedstruct,whycan'textrafieldsbeplacedinthetailpadding?(4个答案)关闭4年前。我倾向于认为我对C++内部结构和内存布局有很好的掌握,但这个让我感到困惑。我有以下测试代码:#includestructFoo{//Foo(){}intx;chary;};structBar:publicFoo{charz[3];};intmain(){printf("Foo:%uBar:%u\n",(unsigned)sizeof(Foo),(unsigned)sizeof(Bar));}输出

C++ sizeof 包装类

假设我有一个类A,它不继承任何东西,没有虚方法,并且只有一个T类型的变量。C++是否保证sizeof(A)==sizeof(T)?编辑:另外,如果T是复合类型,会有什么不同吗? 最佳答案 不,由于填充,它可能超过sizeof(T)。 关于C++sizeof包装类,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5994302/

c++ - 关于C++虚拟继承的问题

以下代码来自《InsidetheC++objectmodel》一书#includeusingnamespacestd;classX{};classY:publicvirtualX{};classZ:publicvirtualX{};classA:publicY,publicZ{};intmain(){cout在我的电脑(Windows,VS2010)中,输出是:1448这是我的问题1,sizeof(X)=1书上说当X类型生成两个实例时,说xa和xb。编译向A中插入一个字节,以便xa和xb可以具有不同的地址。我不太明白原因。2,sizeof(Y)=4通过使用虚拟继承,我们会不会有一个额外

c++ - C++ 类的大小

这是打印不同类别大小的代码#includeusingnamespacestd;classEmptyClass{};classAbstractClass{public:virtualvoidfuncOne()=0;virtualvoidfuncTwo()=0;};classNotAbstrClass{public:intvirtFunc(int);};classMixClass{public:virtualvoidclFunc(int);staticinti;intj;};intmain(){//Printsizeofclassorclassobjectscout程序在C++11编译器上

c++ - 由于放置新用法而禁止虚拟功能的体面方法

在编译/运行时检查特定结构/类没有任何虚函数的体面方法是什么。此检查是必需的,以确保在执行新放置时正确的字节对齐。即使有一个虚函数也会将整个数据移动vtable指针大小,这将与放置new运算符一起把事情搞得一团糟。一些更多的细节:我需要一些适用于所有主要编译器和平台的东西,例如Windows、Linux和Solaris上的VS2005、VC++10、GCC4.5和SunStudio12.1。在以下情况下保证工作的东西应该足够了:structA{charc;voidm();};structB:A{voidm();};如果有人决定进行此更改:structA{charc;virtualvoi

c++ - c 和 c++ 中 sizeof 运算符的工作是否不同

这个问题在这里已经有了答案:Sizeofcharacter('a')inC/C++(4个答案)关闭9年前。我写了一个小的printf语句,它在C和C++中的工作方式不同:inti;printf("%d%d%d%d%d\n",sizeof(i),sizeof('A'),sizeof(sizeof('A')),sizeof(float),sizeof(3.14));上述程序使用gcc编译器在c中的输出是44848使用g++编译器在c++中上述程序的输出是41848我预计41448在c中。但结果并非如此。printfsizeof(sizeof('A'))中的第三个参数给出8谁能告诉我这是怎么

c++ - 在编译时打印 sizeof(T)

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:IsitpossibletoprintoutthesizeofaC++classatcompile-time?我可以在编译时输出对象的大小吗?由于编译器在编译源文件时已经有了这些信息,我是否可以看到它(在编译时)而不是经历在某处输出大小的冗长过程在我的应用程序的控制台或调试输出窗口中?这将非常有用,尤其是当我能够编译单个源文件时,这为我在处理大型项目时节省了大量时间。

C++ 类空类大小 1 字节

我是C++的新手,发现了C++中的一个特殊功能。我看到一个空的大小是1个字节,我做了一些研究,发现这样做是因为每个对象都必须有一个不同的地址。但是我想知道放置的那1个字节的内容是什么。我知道它不包含“this”指针,但它是一个虚拟字节还是实际上有一些内容??? 最佳答案 没有内容。这只是一个虚拟字节。每个class或struct的sizeof都必须大于0,因此您的行为。这是标准的预期和强制要求。 关于C++类空类大小1字节,我们在StackOverflow上找到一个类似的问题: