草庐IT

sizeof_array

全部标签

c++ - 将默认构造函数添加到基类会更改派生类型的 sizeof()

这个问题在这里已经有了答案:Whenextendingapaddedstruct,whycan'textrafieldsbeplacedinthetailpadding?(4个答案)关闭4年前。我倾向于认为我对C++内部结构和内存布局有很好的掌握,但这个让我感到困惑。我有以下测试代码:#includestructFoo{//Foo(){}intx;chary;};structBar:publicFoo{charz[3];};intmain(){printf("Foo:%uBar:%u\n",(unsigned)sizeof(Foo),(unsigned)sizeof(Bar));}输出

c++ - 为什么二维 std::array 不能用两层列表初始化器初始化?

有人能帮我理解为什么我的编译器不能/不能推断出这个吗?(使用g++7.3)不起作用:#includestd::array,2>f(){return{{0,0},{0,0}};}工作正常:#includestd::array,2>f(){return{std::array{0,0},{0,0}};}同样奇怪的是,这也失败了:#includestd::array,2>f(){returnstd::array,2>{{0,0},{0,0}};}@1201ProgramAlarm指出添加另一组花括号是可行的:#includestd::array,2>f(){return{{{0,0},{0,0

C++ sizeof 包装类

假设我有一个类A,它不继承任何东西,没有虚方法,并且只有一个T类型的变量。C++是否保证sizeof(A)==sizeof(T)?编辑:另外,如果T是复合类型,会有什么不同吗? 最佳答案 不,由于填充,它可能超过sizeof(T)。 关于C++sizeof包装类,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5994302/

c++ - 错误 C2536 : cannot specify explicit initializer for arrays in Visual Studio 2013 的解决方法

下面的代码不能用VisualStudio2013编译,而它应该:classA{A():m_array{0,1,2}{}//errorC2536:'A::A::m_array':cannotspecifyexplicitinitializerforarraysprivate:intm_array[3];};参见bugreport了解更多详情。有哪些可能的解决方法? 最佳答案 如评论所述,您可以尝试此解决方法。classA{A():m_array({0,1,2}){}private:std::arraym_array;};似乎VS201

c++ - 将 std::array 作为模板可变参数函数的参数传递

我正在尝试了解C++11中的可变参数模板。我有一个类,它基本上是std::array的包装器。我希望能够将函数对象(最好是lambda)传递给成员函数,然后将std::array的元素作为函数对象的参数传递。我使用了static_assert来检查参数的数量是否与数组的长度匹配,但我想不出一种方法来将元素作为参数传递。这是代码#include#include#include#includeusingnamespacestd;templatestructContainer{templateContainer(Ts&&...vs):data{{std::forward(vs)...}}{s

c++ - 追加到 std::array

因为我无法找到这样的函数(不正确?),我正在尝试创建一个编译时函数(constexpr)函数,它接受std::arrayarr。和一个Tt并返回一个新的std::array与t添加到arr的末尾.我从这样的事情开始:templateconstexprstd::arrayappend(std::arraya,Tt);templateconstexprstd::arrayappend(std::arraya,Tt){returnstd::array{t};}templateconstexprstd::arrayappend(std::arraya,Tt){returnstd::array{

c++ - c 和 c++ 中 sizeof 运算符的工作是否不同

这个问题在这里已经有了答案:Sizeofcharacter('a')inC/C++(4个答案)关闭9年前。我写了一个小的printf语句,它在C和C++中的工作方式不同:inti;printf("%d%d%d%d%d\n",sizeof(i),sizeof('A'),sizeof(sizeof('A')),sizeof(float),sizeof(3.14));上述程序使用gcc编译器在c中的输出是44848使用g++编译器在c++中上述程序的输出是41848我预计41448在c中。但结果并非如此。printfsizeof(sizeof('A'))中的第三个参数给出8谁能告诉我这是怎么

c++ - std::make_array 的当前状态

提议的std::make_array函数的当前状态是什么here?我找不到任何关于它可能被接受的信息。根据cppreference.com,它位于std::experimental命名空间中。C++compilersupport上根本没有提到它也不在Wikipedia-C++17,Wikipedia-C++20,和C++17标准草案。 最佳答案 正如@DeiDei所写,C++17包括templateargumentdeductionforclasses,所以你现在可以写:std::pairp(foo,bar);std::arraya

c++ - 在编译时打印 sizeof(T)

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:IsitpossibletoprintoutthesizeofaC++classatcompile-time?我可以在编译时输出对象的大小吗?由于编译器在编译源文件时已经有了这些信息,我是否可以看到它(在编译时)而不是经历在某处输出大小的冗长过程在我的应用程序的控制台或调试输出窗口中?这将非常有用,尤其是当我能够编译单个源文件时,这为我在处理大型项目时节省了大量时间。

c++ - 获取错误 "array bound is not an integer constant before ' ]' token"

我正在尝试使用数组实现堆栈,但收到错误消息。classStack{private:intcap;intelements[this->cap];//cap=5;this->top=-1;};指示的行有这些错误:Multiplemarkersatthisline-invaliduseof'this'attoplevel-arrayboundisnotanintegerconstantbefore']'token我做错了什么? 最佳答案 在C++中,数组的大小必须是编译时已知的常量。如果不是这种情况,您将收到错误消息。在这里,你有inte