草庐IT

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

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

c++ - 包含字符串值的结构在使用动态内存分配创建后在分配时导致段错误

编译器在以下代码上抛出运行时段错误:#include#includeusingnamespacestd;structNode{intdata;void*next;stringnodeType;};Node*initNode(intdata){Node*n=(Node*)malloc(sizeof(Node));n->data=data;n->next=NULL;n->nodeType="Node";//ifthislineiscommenteditworkselsesegfaultreturnn;}intmain(){Node*n1=initNode(10);coutdata有人可以解

c++ - 以下代码的输出是什么?

这个问题在这里已经有了答案:Whydoesthiscallthedefaultconstructor?(3个答案)关闭9年前。此代码发布于http://accu.org/index.php/cvujournal,2013年7月发行。我无法理解输出,任何解释都会有帮助#includeintx;structi{i(){x=0;std::cout输出:--C10我期待:--C242有什么解释吗?

c++ - C++中的模式匹配风格?

我喜欢Haskell风格的模式匹配。我的C++代码如下:ObjectPtrptr;if(ptr.isType()){//isTypereturnsaboolPtrp=ptr.convertAs();//convertAsreturnsaPtr......}if(ptr.isType()){Ptrp=ptr.convertAs();......}现在,我可以定义任何宏来简化它吗?我一直在思考这个问题,但无法进一步简化。谢谢! 最佳答案 dynamic_cast看起来会做你想做的事structA{virtual~A(){}};struc

c++ - 这种尺寸对齐是如何工作的

关于所提供的评论,我无法理解以下代码。此代码的作用是什么?8-aligned的等效代码是什么?/*segmentsizemustbe4-aligned*/attr->options.ssize&=~3;这里,ssize是unsignedint类型。 最佳答案 由于4在二进制中是100,因此任何与4字节边界对齐的值(即4的倍数)都会将最后两位设置为零。3在二进制中是11,~3是这些位的按位取反,即...1111100。对该值执行按位与将使每一位保持相同,除了最后两个将被清除(位&1==位,位&0==0)。这为我们提供了下一个较低或相等

c++ - 为struct动态分配内存

我正在上C++类(class),并且有一项作业要求我为结构动态分配内存。我不记得在类里面讨论过这个,我们只是在继续上课之前简单地接触过new运算符。现在我必须“动态分配一个学生,然后提示用户输入学生的名字、姓氏和A-number(身份证号)。”我的结构是这样写的structStudent{stringfirstName,lastName,aNumber;doubleGPA;};我试过Studentstudent1=newStudent;但这不起作用,我不确定如何使用结构动态执行此操作。 最佳答案 将您的定义更改为structStud

c++ - 我如何在 Flex/bison 中实现 If 语句

我没有收到错误,请你帮我解决一下,这是.l和.y文件。谢谢。%{#include"ifanw.tab.h"externintyylval;%}%%"="{returnEQ;}"!="{returnNE;}""{returnGT;}">="{returnGE;}"+"{returnPLUS;}"-"{returnMINUS;}"*"{returnMULT;}"/"{returnDIVIDE;}")"{returnRPAREN;}"("{returnLPAREN;}":="{returnASSIGN;}";"{returnSEMICOLON;}"IF"{returnIF;}"THEN"{r

c++ - 成员字段,构建顺序

在C++中,当执行如下所示的操作时,是否保证构造顺序?Logger::Logger():kFilePath_("../logs/runtime.log"),logFile_(kFilePath_){//...} 最佳答案 是的,构建的顺序总是有保证的。但是,不能保证它与对象在初始化列表中出现的顺序相同。成员变量是按照它们在类主体中声明的顺序构造的。例如:structA{};structB{};structS{Aa;Bb;S():b(),a(){}};a先被构建,然后是b。成员变量在初始化列表中出现的顺序无关紧要。

c++ - 复制到数组时的 memcpy 与赋值;为什么这会生成不同的代码?

编译以下代码时,#includestructX{chara,b,c,d;};voidcopy_assignment(char*p,Xx){*p++=x.a;*p++=x.b;*p++=x.c;*p++=x.d;}voidcopy_memcpy(char*p,Xx){memcpy(p,&x,sizeof(X));}GCC和clang都为copy_assignment发出一系列movb指令,同时为copy_memcpy发出单个movl指令。假设X没有填充,而这里没有,那么两者不应该是等价的吗?单个movl不是更有效吗?准确地说,我正在编译:g++-O3-S-oprog.Sprog.cpp和

c++ - 定义最小尺寸的结构

我想定义一个结构,例如type,这样sizeof(type)不低于某个值。动机:我有一个vectorstd::vector我将从中删除一些元素。另外,我已经将一些元素的索引保存到其他地方,因此我只想将其标记为未使用并在将来重用它。这导致我将下一个可用位置保存为已删除位置的列表。结果,sizeof(type)应不少于sizeof(size_t)和type也应该正确对齐。可能的解决方案:boost::variant从我的角度来看,这有两个问题。如果我useboost::get,性能将显着下降。如果我使用boost::apply_visitor,根据我的个人资料,语法会很奇怪,性能也会下降。