我有一个C++问题。我写了以下类(class):classc{intf(intx,inty){returnx;}};c类的sizeof()返回“1”。我真的不明白为什么它会返回1。为了更好地理解发生了什么,我添加了另一个函数:classc{intf(intx,inty){returnx;}intg(intx,inty){returnx;}};现在下面真的让我很困惑!sizeof(c)仍然是1(!?!?!?!)。所以我猜函数不会改变类的大小,但是为什么呢???为什么尺寸是1?它是特定于编译器的吗?谢谢!:-) 最佳答案 该类不包含数据
Java中是否有任何内置方法来查找任何数据类型的大小?有什么方法可以找到尺寸吗? 最佳答案 没有。标准的JavaSE类库中没有这样的方法。设计者的观点是Java不需要它,因为该语言不需要应用程序1知道需要为原始值(对象)保留多少空间或具有给定元素数量的数组。您可能认为sizeof运算符对于需要知道其数据结构占用多少空间的人很有用。但是,您也可以使用Java内存分析器简单可靠地获取这些信息及更多信息,因此不需要sizeof方法。之前的评论者指出sizeof(someType)比4更具可读性。如果您接受该可读性论点,那么补救措施就在您手
我只是在胡乱学习vector和结构,有一次,我尝试以字节为单位输出vector的大小。代码如下:#include#includestructFoo{std::vectora;};intmain(){usingstd::cout;usingstd::endl;Foo*f1=newFoo;f1->a.push_back(5);couta)a[0])输出是24和4。显然第二行打印了4,因为那是int的大小。但是为什么另一个值是24呢?一个vector是否占用24字节的内存?谢谢! 最佳答案 虽然std::vector的公共(public)
为什么std::string的大小,由sizeof(std::string)决定,产生8?我认为它应该超过8因为它必须有一个int(sizeof(int)==8在我的机器上)数据成员用于在O(1)中给出std::string::length()和std::string::size()可能还有一个char*用于字符。 最佳答案 std::string的实现没有被C++标准指定。它只描述类的行为。但是,我希望类中包含不止一个指针的信息。特别是:指向实际字符串的指针。可用尺寸。实际使用的尺寸。它当然可以将所有这些存储在一个动态分配的位置,
不包含头文件就无法定义native算子的结果不是很麻烦吗?据此page,size_t在头文件cstddef、cstdio、cstring、ctime和cstdlib中定义。因此,如果这些头文件都不包含,那么size_t应该是未定义的。但是,以下程序编译时没有任何警告(使用MSVC2015RC)。intmain(){autod_Size=sizeof(int);return0;}似乎size_t有点像是原生类型和typedef之间的SCSS。标准是怎么说的? 最佳答案 5.3.3Sizeof[expr.sizeof]1)Thesize
这可能是一个愚蠢的问题,但是当您不传入数组中元素的数量时,sizeof运算符如何知道数组操作数的大小。我知道它不会返回数组中的总元素,而是返回字节的大小,但要得到它仍然必须知道数组何时结束。只是好奇这是如何工作的。 最佳答案 sizeof在编译时被解释,编译器知道数组是如何声明的(因此它占用了多少空间)。在动态分配的数组上调用sizeof可能不会达到您想要的效果,因为(正如您所提到的)未指定数组的终点。 关于c++-sizeof如何知道操作数数组的大小?,我们在StackOverflow
char、signedchar和unsignedchar的大小由C++标准本身定义为1个字节。我想知道为什么它也没有定义sizeof(bool)?C++03标准$5.3.3/1说,sizeof(char),sizeof(signedchar)andsizeof(unsignedchar)are1;theresultofsizeofappliedtoanyotherfundamentaltype(3.9.1)isimplementation-defined.[Note:inparticular,sizeof(bool)andsizeof(wchar_t)areimplementation
我有两个结构体定义如下:structEmptyStruct{};structStructEmptyArr{intarr[0];};intmain(void){printf("sizeof(EmptyStruct)=%ld\n",sizeof(EmptyStruct));printf("sizeof(StructEmptyArr)=%ld\n",sizeof(StructEmptyArr));return0;}在Ubuntu14.04、x64上使用gcc(g++)4.8.4编译。输出(对于gcc和g++):sizeof(EmptyStruct)=1sizeof(StructEmptyAr
假设T和constT是两种大小相同且对齐方式相同的类型似乎是合理的,但在考虑了一些实际系统之后,似乎它们可能会有所不同。让我解释一下:假设您的系统具有两种类型的内存:RAM和闪存(只读)。RAM是8位可寻址的,而Flash只能是16位可寻址的。假设这是T:structT{uint8_tx;uint16_ty;};在字节可寻址RAM中,该结构体的长度为3个字节......但在双字节可寻址闪存(const变量所在的位置)中,该结构体必须位于由于对齐问题,至少4个字节长。所以这是我的问题:c和c++标准是否保证const和非const类型的大小和对齐方式? 最佳答
我们都知道取消引用空指针或指向未分配内存的指针会调用未定义的行为。但是在传递给sizeof的表达式中使用时的规则是什么?例如:int*ptr=0;intsize=sizeof(*ptr);这也是未定义的吗? 最佳答案 在大多数情况下,您会发现sizeof(*x)实际上根本不计算*x。而且,由于它是调用未定义行为的指针的求值(取消引用),您会发现它基本上没问题。C11标准在6.5.3.4中有这样的说法。sizeof运算符/2(我在所有这些引号中强调):Thesizeofoperatoryieldsthesize(inbytes)ofi