草庐IT

c++ - 自定义字节大小?

那么,您知道char类型的原语如何具有1个字节的大小吗?我将如何制作具有自定义尺寸的基元?因此,就像我制作一个大小为16字节的inint而不是4字节大小。有没有办法做到这一点?有解决办法吗? 最佳答案 这取决于你为什么要这样做。通常,您不能使用少于8位的类型,因为这是体系结构的可寻址单元。但是,您可以使用结构来定义不同的长度:structs{unsignedinta:4;//ais4bitsunsignedintb:4;//bis4bitsunsignedintc:16;//cis16bits};但是,不能保证该结构的长度为24位。

c++ - sizeof(*this) 和结构继承

假设我有一个如下所示的结构:structParentStruct{virtualvoidXYZ(){getSize(sizeof(*this));}intmemberX;}还有另一个继承父结构的struct:structChildStruct:publicParentStruct{intmemberY;intmemberZ;}假设sizeof(int)==4,是否可以将12的值传递给函数getSize()从子结构调用(我目前得到的值是4)?我宁愿不必覆盖所有子结构中的XYZ(),因为我会有很多子结构。 最佳答案 正如其他人所说,th

c++ - 我不明白为什么 'Derived1' 需要与 'Derived3' 相同的内存量

在下面的代码中,我不明白为什么“Derived1”需要与“Derived3”相同的内存量。另外Derived4的size为16有没有什么特殊意义。#includeusingnamespacestd;classEmpty{};classDerived1:publicEmpty{};classDerived2:virtualpublicEmpty{};classDerived3:publicEmpty{charc;};classDerived4:virtualpublicEmpty{charc;};classDummy{charc;};intmain(){cout这段代码的输出是:size

c++ - c/c++ 中类型的大小

我最近问了一个问题here关于char的大小。看着我的问题,这让我想到了另一个问题:char或sizeof(int)中的位数是CPU相关的、操作系统相关的、编译器相关的,还是上述的某种组合?谁决定我的编译器中的sizeof(int)是4?编辑:让我解释一下:例如,我在64位系统上的编译器使用32位int。这是由编译器或操作系统设置为这个(确切的)操作系统/平台组合上所有编译器的标准int吗?char=8位怎么样?操作系统可以决定它要使用16位字符吗?编译器可以吗? 最佳答案 根据所有ISOC标准,所有尺寸均以char尺寸的倍数测量.

c++ - 如何用虚函数确定类的大小?

这是一道作业题。对于以下代码,#includeusingnamespacestd;classA{public:virtualvoidf(){}};classB{public:virtualvoidf2(){}};classC:publicA,publicB{public:virtualvoidf3(){}};classD:publicC{public:virtualvoidf4(){}};intmain(){cout输出为:8谁能解释一下它是8个字节吗?如果vtable的实现依赖于编译器,那么面试这类问题应该怎么回答呢?虚基类呢?编辑:我在32位平台上工作。

c++ - new[] 表达式不遵守 Microsoft VC++ 中的对齐方式

如果使用new[]表达式来创建具有析构函数的对象数组,数组中的对象可能没有正确对齐#include#include#pragmapack(8)structA{int64_ti;chardummy;~A(){}};intmain(){A*pa=newA[2];printf("sizeof(A)=%d,pointer=%p",sizeof(A),pa);}(我用VC++2010express构建32位目标)输出(在我的电脑上)是:sizeof(A)=16pointer=00344f4c(sizeof(A)=16表明编译器理解A的对齐要求并且该结构用7个字节填充[编辑:__alignof(A

c++ - 枚举大小 *在实践中*

对于2011年之前的C++,标准规定枚举可以是任何大小,从byte到longlong。但在实践中,似乎大多数编译器都将它们设为4字节的整数。那么,在实践中是否有任何模糊当前的编译器不会将它们设为整数?我似乎需要澄清一下,我没有做任何奇怪的事情,比如枚举>2^31。只是简单的枚举。在32位或64位系统上,我的软件将无法在16位系统上运行! 最佳答案 让我们在任何现代编译器上看看它:#include#includeenumMySmallSmall{SmallValue=0,};enumMyLongLong{LongValue=std::

c++ - `__declspec(align(#))` 是如何工作的?

是的,我已经阅读了这个:http://msdn.microsoft.com/en-us/library/83ythb65.aspx但我不清楚。首先,__declspec(align(#))使用它声明的每个对象(在结构中)都从对齐的偏移量开始。那部分很清楚。对齐也由对象所在的结构“继承”。但它不会改变对象的大小,不是吗?准确地说,为什么sizeof()在这段代码中:__declspec(align(32))structaType{inta;intb;};sizeof(aType);返回32? 最佳答案 对象的大小用于计算数组中的偏移量

c++ - 'sizeof' 对不完整类型 'SDL_Window' 的无效应用

创建指向SDL_Window结构的指针并将其分配给shared_ptr,会导致上述错误。部分类(class):#includeclassApplication{staticstd::shared_ptrwindow;}定义:#include"Application.h"std::shared_ptrApplication::window{};boolApplication::init(){SDL_Window*window_=nullptr;if((window_=SDL_CreateWindow(title.c_str(),SDL_WINDOWPOS_UNDEFINED,SDL_WI

c++ - 为什么 sizeof(ptrdiff_t) == sizeof(uintptr_t)

我看到几篇关于size_t与uintptr_t/ptrdiff_t的帖子(例如size_tvs.uintptr_t),但没有关于这些新的c99ptr大小类型的相对大小的帖子。示例机器:vanillaubuntu14ltsx64,gcc4.8:printf("%zu,%zu,%zu\n",sizeof(uintptr_t),sizeof(intptr_t),sizeof(ptrdiff_t));打印:“8,8,8”这对我来说没有意义,因为我希望必须签名的diff类型需要比unsignedptr本身更多的位。考虑:NULL-(2^64-1)/*largestptr,64bitsof1's.