草庐IT

sizeof_array

全部标签

c++ - 使用 C++ 的 OpenGL : vtable troubles when passing class array to glTexImage2d

我用floatr、floatg、floatb、floatalpha创建了一个类Color。它有一个带有虚拟析构函数的基类。我正在尝试将Color数组传递给opengl函数glTexImage2D,其中GL_RGBA组织类型为float(这将是一个数组{floatr,floatg,floatb,floatalpha}).这要求Color仅包含4个float(16字节大小)。但是,sizeof(Color)显示我的类有一个20字节的大小,因为Color的基类有一个vtable,感谢析构函数。如何保留我的vtable并将我的Color数组传递给glTexImage2D?

c++ - C++ 与 D 中的 sizeof 运算符和对齐

考虑以下程序:#includeclassT{charc;inti;};intmain(){std::cout由于对齐,它给出了预期的输出8。C++编译器添加3个字节的填充。但是如果我用D语言做同样的事情,它会给我完全出乎意料的输出。(参见现场演示here。)importstd.stdio;classT{charc;inti;}intmain(){writefln("sizeofTis%d",T.sizeof);writefln("sizeofcharis%d",char.sizeof);writefln("sizeofintis%d",int.sizeof);return0;}我得到的

c++ - 类 std::array of objects without default constructors

所以让我们假设我有以下类(class)classNoDefaultConstructor{NoDefaultConstructor()=delete;...};我还有另一个类,它有一个类型为NoDefaultConstructor和其他成员的数组classWrapper{std::arrayarr;...};如何在Wrapper的构造函数中初始化数组(可能在使用std::intializer_list的初始化列表中)?更具体地说,是我可以将参数传递给Wrapper的初始化列表中的数组构造函数以具有类似于以下的构造的唯一方法吗?我正在考虑这样做,因为将来数组的大小可能会发生变化。temp

c++ - 菱形多态继承 : sizeof Most derived Class

我知道菱形继承会导致歧义,可以通过virtualBaseClasses使用继承来避免,问题不在于此。当类是多态时,问题是关于菱形层次结构中最派生类的大小。这是示例代码和示例输出:#includeusingnamespacestd;classBase{public:virtualvoiddoSomething(){}};classDerived1:publicvirtualBase{public:virtualvoiddoSomething(){}};classDerived2:publicvirtualBase{public:virtualvoiddoSomething(){}};cl

c++ - 如何查找和替换 Eigen::Array 对象中的所有非有限数字?

假设我有一个用double填充的数组:Eigen::Arraymyarray;现在我想用数字0.0替换myarray的任何非有限元素,我该怎么做?我正在考虑将它乘以我发现无穷大的零值数组,如下所示:myarray*=myarray.cwiseEqual(std::numeric_limits::infinity())==0.0;并对每个无效类型执行此操作。但这真的很乱。有没有更好的办法? 最佳答案 这是一种简单的方法:myarray=myarray.unaryExpr([](doublev){returnstd::isfinite(

c++ - sizeof 运算符在运行时发生变化?

这个问题在这里已经有了答案:Howsizeof(array)worksatruntime?(6个答案)关闭8年前。sizeof运算符是一个编译时运算符,但在下面的程序中它会在运行时发生变化。#includevoidfunc(inti){inta[i];printf("%d\n",sizeof(a));}main(){inti=0;while(i内存将在运行时分配。编译器如何计算没有结构填充的结构大小?

c++ - 无法直接分配元素 std::array,它说没有运算符 "="匹配

在我的processor类有一个数组.voidProcessor::addJob(Jobjob){this->Jobs[this->uBound]=job;this->uBound++;}我想在我的processor中添加一个新元素类(class)。为此,我创建了新的private:intuBound=0我的属性(property)processor类(class)。我直接分配this->Jobs[this->uBound]=job;.它给了我一个错误。它说Error:nooperator"="matchestheseoperands.operandtypesare:std::arra

c++ - 作业 : Making an array using pointers

我正在解决作业问题。我和其他一些学生非常确定我们的老师说错了,但也许不是。我已经检查了这里的一些问题,但无法真正找到使用指针创建本质上是数组的方法。说明如下。重写以下程序以使用指针而不是数组:代码是这样的intmain(){intsalary[20];inti;for(i=0;i>salary[i];}for(i=0;i我的解决方案是这样的:intmain(){int*salary_pointer=newint;for(inti=0;i>*(salary_pointer+i);}for(inti=0;i它一直在salarynumber13左右标记段错误我的主要目的(因为我几乎可以肯定我

c++ - 无法将 unique_ptr 添加到 std::array

在书籍和网上搜索之后,直到我的耳朵之间开始剧烈疼痛,我无法弄清楚如何将std::unique_ptr添加到std::array.以下是类成员:std::array,MAX_ELMS_NUM>m_collection;在.cpp文件中,我试图将填充在std::unique_ptr中的新媒体指针添加到数组中:Media*newMedia=CreateNewMedia(Mediainfostuff);unique_ptrnp(newMedia);m_collection[0]=np;除了最后一行之外的所有内容都可以编译。 最佳答案 最后一

c++ - 在 std::array 中重载 operator[]

我想优化我的代码,重载std::array中的方括号[]运算符,我在任何地方都使用它减一。代码编译但从不调用重载函数,谁能告诉我为什么?#include#includeclassA{std::arrayvar{0,1,2,3,4};std::array::value_type&operator[](std::size_tp_index);};std::array::value_type&A::operator[](std::size_tp_index){returnvar[p_index-1];}intmain(){Aa;std::cout代码返回“1”,但我希望返回“0”。提前致谢!