草庐IT

WPRINTF_SIZEOF

全部标签

c++ - C 和 C++ 中 sizeof 运算符的不同输出

C和C++中sizeof()运算符的不同输出。在C中:intmain(){printf("%zu\n",sizeof(1==1));return0;}输出:4在C++中:intmain(){std::cout输出:1问题:为什么输出不同?sizeof是否独立于操作系统或编译器?是否取决于语言? 最佳答案 根据N1570草稿(c11):6.5.9相等运算符The==(equalto)and!=(notequalto)operatorsareanalogoustotherelationaloperatorsexceptfortheirl

c++ - 当我从虚拟基派生 D 时,为什么 VS2015 中的 sizeof(D) 增加了 8 个字节?

我正在使用C++14§3.11/2中的示例:structB{longdoubled;};structD:virtualB{charc;}在clang、g++和VS2015中运行下面的代码片段之后#includestructB{longdoubled;};structD:/*virtual*/B{charc;};intmain(){std::cout我得到了以下结果:clangg++VS2015sizeof(longdouble)16168alignof(longdouble)16168sizeof(B)16168alignof(B)16168sizeof(D)323216alignof

c++ - sizeof(size_t) 和 sizeof(ptrdiff_t) 什么时候可以不同?

什么时候可以sizeof(size_t)和sizeof(ptrdiff_t)有区别吗?有这方面的真实示例吗?注意,我知道所有标准都说这些类型是实现定义的。但是我知道的所有实现,sizeof(size_t)和sizeof(ptrdiff_t)等于。也许出于某些奇怪(或不太奇怪)的原因,它们可能会有所不同。看来,sizeof(ptrdiff_t)这不是一个非常有用的情况,因为指针运算对于大型数组来说非常有限。另一种情况,sizeof(ptrdiff_t)>sizeof(size_t)可能有点用处,因为所有指针减法都将在数组上定义(如果数组大于PTRDIFF_MAX,则指针减法将为所有远距离

扩展前后的 C++ sizeof 运算符

我现在正在测试C++的结果sizeof运算符(operator):classS{};classA:publicS{virtualvoidfun()=0;};classB{};classC:publicB,publicA{};intmain(){cout但是如果我删除类S的扩展:classA{virtualvoidfun()=0;};classB{};classC:publicB,publicA{};intmain(){cout谁能解释sizeof(C)输出的不同之处?在这两个例子中?类S只是一个空类(我知道,sizeof(S)==1),那么为什么A会有所不同呢?有基类吗?特别是因为它对

c++ - 什么时候 sizeof(myPOD) 太大而无法在 x64 上按值传递?

我预计对于最大8字节的结构没有什么不同,但是更大的POD类型呢?当类型的大小超过机器字大小时,按值传递是否会变得更昂贵,或者是否有其他因素(如缓存行大小)会影响性能?我主要对x64感兴趣,但也可以随意包含一些x86的数字。说明:我可能想得太狭隘了,因为我不知道在其中发挥作用的所有因素(寄存器、调用约定、编译器优化)。我主要对Microsoft的C++编译器感兴趣,它只使用__fastcall。我感兴趣的是,在了解架构、类型大小、缓存大小等参数传递方面,是否有任何一般性建议。例如:“当类型小于N字节时,最好按值传递类型。“其中N是可以从我们已知的事物中推导出来的事物。

c++ - 在 union 中获取 sizeof 匿名结构

我希望这不是一个重复的问题,但我已经进行了一些详细搜索,但之前没有找到我的确切案例。我有一个简单的结构,我也希望能够将其作为简单的字节数组进行访问union{struct{unsignedchara;unsignedcharb;//...Someothermembers...unsignedcharw;};unsignedcharbytes[sizeof(what?)];}myUnion;请注意,该结构没有命名,也没有给它自己的成员名称。这样我就可以使用myUnion.a访问该成员,而不是myUnion.myStruct.a。但是,如果没有一些名称,除了每次更改内容时手动计算之外,我如

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

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

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.

c++ - 很难理解 char (*p)[sizeof(c)]; 的优先级原则;

我正在学习指针并挑战自己,我尝试取消引用指向字符数组的指针。最终这成功了:char(*p)[sizeof(c)];其中c是一个数组c[]="something"我很难理解(*p)[sizeof(c)];与*p[sizeof(c)];的区别。p>根据我目前所知道的(这并不多!)计算机在(*p)[sizeof(c)];的情况下是这样说的:“p指向c!哦,顺便说一句,p是一个数组,无论sizeof(c)最终是什么”。但这对我来说似乎很奇怪,所以我想我对添加括号时所构造的内容感到困惑。谁能解释一下?上下文中的完整代码:#includeusingnamespacestd;intmain(inta