草庐IT

c++ - 在C++中初始化结构的成员变量

我有一个包含一些double值的结构:structA{doublea;doubleb;}如果我创建一个新结构,例如Aa,在C++中是否所有成员(例如a.a)都自动初始化为零? 最佳答案 默认情况下不是(除非它是静态存储的变量-即static或全局变量)。有几种方法可以将这种结构初始化为“零”:Aa={0.0,0.0};Aa={};Aa=A();或者如果你有一个C++11兼容的编译器:Aa{0.0,0.0};Aa{}或者在struct定义中添加一个构造函数:structA{doublea;doubleb;A():a(0.0),b(0.

c++ - 从 C++ 结构字段获取单个字段的大小

简短版本是:如何了解C++字段的单个字段的大小(以位为单位)?为了澄清,我正在谈论的领域的一个例子:structTest{unsignedfield1:4;//takesup4bitsunsignedfield2:8;//8bitsunsignedfield3:1;//1bitunsignedfield4:3;//3bitsunsignedfield5:16;//16moretomakeita32bitstructintnormal_member;//normalstructvariablemember,4bytesonmysystem};Testt;t.field1=1;t.fiel

c++ - C/C++ : passing a struct/class with a member array to a function by value

structA{intV[100];};voidf(Aa){a.V[0]=30;}intmain(){Aa;a.V[0]=10;f(a);cout我期望30作为输出,但我得到了10。我知道,如果参数是按值传递的,数组(也是类/结构的成员)也是按引用传递的。相反,当成员时,它们似乎是通过拷贝传递的。是真的吗? 最佳答案 按值将数组作为参数传递给函数会导致它衰减为指向第一个元素的指针,这就像按引用传递一样。将一个包含数组(不是指针)的对象按值传递给函数会导致该对象(包括数组)被复制到函数的参数中。如果您想在调用站点看到该修改,请通过非常

c++ - C/C++ : size of a typedef struct containing an int and enum == sizeof(int)?

我在我的Ubuntu(i686)上使用gcc版本4.3.3。我写了一个精简的测试程序来描述我缺乏理解和我的问题。该程序应告诉我我实现的结构的大小。所以我有一个typedefstruct用于Message和一个小的main来玩:#includetypedefstruct{intsize;enum{token=0x123456};}Message;intmain(intargc,char*argv[]){Messagem;m.size=30;printf("sizeof(int):%d\n",sizeof(int));printf("sizeof(0x123456):%d\n",sizeo

c++ - 将不正确的值类型分配给结构属性时出现笑脸!

我有点想知道我是不是疯了,但我向你发誓,这段代码输出笑脸作为.name值!!这到底是怎么回事?到目前为止,它似乎只在值为1时有效,其他任何值都会出错。我意识到代码有缺陷->我不需要这方面的帮助。#include#include#include#include#includeusingnamespacestd;usingnamespacetr1;structCollectedData{public:stringname;floatgrade;};intmain(){stringline;listAllData;intcount;ifstreammyFile("test_data.txt"

c++ - 未在范围内声明,即使在 .h 中声明

一直卡在这上面,老师都不知道怎么回事。如果有人可以帮助我,我将不胜感激。我已经在Line结构的头文件中声明了项目。但是,当在Line::display()方法中调用它时,我收到一条错误消息,指出该变量未在范围内声明。我已经向我的老师和我的同龄人展示过,但似乎没有人知道解决方案。这是我的.h://Line.h#defineMAX_CHARS40structLine{public:boolset(intn,constchar*str);voiddisplay()const;private:charitem[MAX_CHARS];intno;};这是我的.cpp文件。//Line.cpp#i

c++ - 我对编译时关联容器有哪些选择?

我需要一种机制,给定类型T1和T2产生第三种类型T3如果对(T1,T2)有效,否则生成特殊的Null类型。我目前将T1定义为一个类,在该类中我可以将T2的有效选项集映射到适当的T3。我正在寻找一种语法,以便可以在T1的定义中内联定义一组有效的T2。这是解决问题的一种方法,使用重载决议:#includestructX{};structY{};structA{};structB{};structC{};structS//T1{Xmember(A){returnX();}//T2=A,T3=XYmember(B){returnY();}//T2=B,T3=Y};structNull{};te

c++ - MacOS 中是否有针对 "struct timeval"的 nanosleep 函数?

我在MacOS(OSXElCapitan10.11.2)中记录时间间隔(至少以毫秒为单位)时遇到问题。显然,基本思想是记录两次时间并进行减法。当我发现“sys/time.h”中有gettimeofday()和这个函数的结构-structtimeval时,问题就发生了。然后拿到时间间隔,想让它按照时间间隔休眠。但是,似乎nanosleep()或usleep()没有时间类型的参数(忽略sleep(),因为我至少需要毫秒)。我应该转换timeval以适应nanosleep()或usleep()还是有更好更简单的方法? 最佳答案 此示例使用

c++ - 普通旧数据 - 对齐要求

假设我有两个具有相同初始成员序列的POD结构A和B,但后来有些不同(我知道,这可以通过继承轻松解决).structA{intx;uint64_ty;intz;};structB{intx;uint64_ty;int8_tz;};指向结构的指针需要指向初始成员(§9.2.20[class.mem])。现在还有两个问题:我发现标准中的哪些地方不能对成员重新排序。我很确定情况就是这样,因为结构需要与C完全兼容,并且对于C规定内存地址必须按照声明的顺序递增。两个结构中公共(public)成员的对齐方式必须相同吗?即,以下是否始终为真:Aa;Bb;assert(offsetof(A,y)==of

C++ 在结构中重载 operator()

这是来自Box2d物理引擎的b2Math.h的代码。structb2Vec2{...///Readfromandindexedelement.floatoperator()(inti)const{return(&x)[i];}///Writetoanindexedelement.floatoperator()(inti){return(&x)[i];}...floatx,y;}为什么我们不能只使用SomeVector.x和SomeVector.y来读/写vector坐标?return(&x)[i];行实际上是如何工作的?我的意思是,对结构的x组件的引用之后的数组括号[]对我来说并不清楚