草庐IT

c++ - 什么是 sizeof(something) == 0?

我有一个模板,它采用具有不同值的结构,例如:structSomething{charstr[10];intvalue;......};在函数内部我使用了sizeof运算符:跳入内存sizeof(Something);有时我不想跳任何东西;我希望sizeof返回零。如果我放入一个空结构,它将返回1;我可以在模板中放入什么以使sizeof返回零? 最佳答案 sizeof永远不会为零。(原因:sizeof(T)是T[]类型数组中元素之间的距离,要求元素地址唯一)。也许您可以使用模板来进行sizeof替换,它通常使用sizeof但专门针对一

c++ - C memset 似乎没有写给每个成员

我写了一个小的坐标类来处理int和float坐标。templateclassvector2{public:vector2(){memset(this,0,sizeof(this));}Tx;Ty;};然后在main()中我做:vector2v;但是根据我的MSVC调试器,只有x值被设置为0,y值没有改变。我以前从未在模板类中使用过sizeof(),这可能是导致问题的原因吗? 最佳答案 不,不要使用memset——它会将指针的大小(在我的x86Intel机器上是4个字节)从this指向的位置开始的字节清零.这是一个坏习惯:当对复杂类使

C++ sizeof 与 bool

这是一个简单的问题。先写代码。structA{intx;};structB{booly;};structC{intx;booly;};在主函数中,我调用cout结果是bool:1int:4classA:4classB:1classC:8为什么C类的大小是8而不是5?请注意,这是在MINGW4.7/Windows7/32位机器上使用gcc编译的。 最佳答案 聚合的对齐方式是其最严格的成员(具有最大对齐要求的成员)的对齐方式。换句话说,结构的大小是其最严格(具有最大对齐要求)成员对齐的倍数。structD{boola;//willbep

c++ - std::array<char, N> 的大小是多少?

这个问题在这里已经有了答案:Isthesizeofstd::arraydefinedbystandard(1个回答)关闭8年前。C++标准对sizeof(std::array)有何规定?应该是(对于某个常量N)?在commenttoadifferentquestion中,有人提到std::array并不总是“堆栈分配”。该评论是对另一条评论的回应,该评论推测为std::array设置了一个太大的常量。声明为局部变量的变量可能会由于“堆栈分配”变量的资源不足而导致程序中止。我假设后续评论意味着std::array是可能的以某种方式切换到动态分配模式。我可以想象,可能会有某种SFINAE可

c++ - 这个 sizeof 表达式是如何计算的?为什么这样调用它?

我在std::optional中看到这段代码实现:templatestructis_assignable{templateconstexprstaticboolhas_assign(...){returnfalse;}template()=std::declval(),true))>//thecommaoperatorisnecessaryforthecaseswhereoperator=returnsvoidconstexprstaticboolhas_assign(bool){returntrue;}constexprstaticboolvalue=has_assign(true)

c++ - 为什么这个结构需要一个大小值?

我在阅读“BeginningOpenGLGameProgrammingSecondEdition”时遇到了这个结构定义:typedefstructtagPIXELFORMATDESCRIPTOR{WORDnSize;//sizeofthestructureWORDnVersion;//alwayssetto1DWORDdwFlags;//flagsforpixelbufferproperties...}"ThefirstofthemoreimportantfieldsinthestructureisnSize.Thisfieldshouldalwaysbesetequaltothesi

C++:获取传递给函数的多维数组的行大小

我正在尝试编写一个函数来打印出多维数组的内容。我知道列的大小,但不知道行的大​​小。编辑:因为我没有说清楚,传递给这个函数的数组不是动态分配的。大小在编译时已知。我正在使用3x2阵列对其进行测试。这是目前的功能:voidprintArrays(intarray1[][2],intarray2[][2]){for(inti=0;i显然,这只有在我知道“i”的大小为3时才有效(在这种情况下)。然而,理想情况下,无论第一维的大小如何,我都希望该函数能够正常工作。我想我可以使用sizeof()函数来做到这一点,例如intsize=sizeof(array1);...然后从那里做一些数学运算。这

c++ - 找出多态对象的大小

我有一个指向多态对象的指针Base*base_ptr。是否可以找出所述对象的动态类型的大小?AFAIK,sizeof(*base_ptr)产生base_ptr静态类型的大小。我开始怀疑这是不可能的,但也许我忽略了一些东西。注意:我知道我可以向我的类型层次结构添加一个虚函数来返回大小,但这不是我的理想解决方案。编辑:sizeof(base_ptr)->sizeof(*base_ptr) 最佳答案 不,您不能在C++中这样做-至少以可移植的方式。最好的办法是在每个类中实现getSize()成员函数。

c++ - 为什么衰减到数组参数的指针似乎不适用于 sizeof()?

我之前读过一个问题,由于与此完全相同而被关闭Whenafunctionhasaspecific-sizearrayparameter,whyisitreplacedwithapointer?和Howtofindthe'sizeof'(apointerpointingtoanarray)?但读完这篇文章后,我仍然对sizeof()的工作原理感到困惑。我知道将数组作为参数传递给函数,例如voidfoo(inta[5])将导致数组参数衰减为指针。我在上述2个问题链接中没有找到关于为什么sizeof()函数本身免于(或至少看似免于)这种指针衰减行为的明确答案。如果sizeof()的行为与任何其

c++ - 获取 vector 的大小(以字节为单位)

这个问题在这里已经有了答案:sizeof()std::vector(C++)(2个答案)关闭9年前。对于这个可能简单而愚蠢的问题,我深表歉意,但我无法在任何地方找到它。我只是不知道如何获取std::vector的字节大小。std::vectorMyVector;/*Thiswillprint24onmysystem*/std::cout那么我如何获得vector的大小呢?!也许通过将24(vector大小)乘以项目数?