草庐IT

c++ - 使用结构统计()

我正在尝试弄清楚如何准确地使用stat()来捕获有关文件的信息。我需要的是能够打印有关文件的多个信息字段。所以..#include#include#include#includeusingnamespacestd;intmain(){structstatbuf;stat("file",&buf);...cout我对如何做到这一点感到非常困惑。为什么&buf是stat的参数?我不关心将这些信息存储在内存中,我只需要在我的C++程序中输出字段。如何访问结构中包含的信息?buf实际上应该包含stat()返回的信息吗? 最佳答案 是的,bu

c++ - sizeof(struct) 返回意外值

这应该很简单,但我不知道在哪里寻找问题:我有一个结构:structregion{public:longlongintx;longlonginty;longlongintwidth;longlongintheight;unsignedcharscale;};当我执行sizeof(region)时,它给了我40而我期望33。有什么想法吗?(mingwgcc,winx64操作系统) 最佳答案 它正在填充结构以适应8字节边界。所以它实际上占用了40个字节的内存-sizeof返回了正确的值。如果您希望它只占用33个字节,请指定packed属性

c++ - : Bit, byte 和 int 哪个更有效?

假设您的结构类似于以下内容:structPerson{intgender;//betwwen0-1intage;//between0-200intbirthmonth;//between0-11intbirthday;//between1-31intbirthdayofweek;//between0-6}就性能而言,哪种数据类型是存储每个字段的最佳数据类型?(例如位域、int、char等)它将在x86处理器上使用并完全存储在RAM中。需要存储相当大的数字(超过50,000),因此需要考虑处理器缓存等。编辑:好的,让我改一下问题。如果内存使用不重要,并且无论使用哪种数据类型都无法将整个数

c++ - Class vs Struct 仅用于数据?

在这种情况下,使用类而不是结构有什么优势吗?(注意:它只会保存变量,永远不会有函数)classFoo{private:structPos{intx,y,z};public:PosPosition;};对比:structFoo{structPos{intx,y,z}Pos;};类似问题:WhenshouldyouuseaclassvsastructinC++?WhatarethedifferencesbetweenstructandclassinC++?WhenshouldIuseastructinsteadofaclass? 最佳答案

c++ - 将 C++ 结构填充为 2 的幂

我正在为嵌入式系统编写一些C++代码。代码使用的I/O接口(interface)要求每条消息的大小(以字节为单位)是2的幂。现在,代码做了类似这样的事情(在几个地方):#pragmapack(1)structMessage{structinternal_{unsignedlongmember1;unsignedlongmember2;unsignedlongmember3;/*moremembers*/}internal;charpad[64-sizeof(internal_)];};#pragmapack()我第一次尝试在64位Fedora上编译代码,其中long是64位。在这种情况

c++ - C++ 中的静态结构

我想定义一个结构,其中将存储一些数学常量。这是我现在得到的:structconsts{//saltdensitykg/m3staticconstdoublegamma;};constdoubleconsts::gamma=2350;它工作正常,但会有超过10个浮点常量,所以我不想在每个浮点常量之前写“staticconst”。并定义类似的东西:staticconststructconsts{//saltdensitykg/m3doublegamma;};constdoubleconsts::gamma=2350;看起来不错,但我遇到了这些错误:1.不允许成员函数重声明2.非静态数据成员

c++ - 为什么编译器不能像在变量声明中那样在结构成员中设置 char[] = { .. } 的大小?

这个问题在这里已经有了答案:Whatisthereasonfornotbeingabletodeducearraysizefrominitializer-stringinmembervariable?(3个答案)关闭5年前。我在结构中使用带有初始化值的struct,如下例所示。我不明白的是为什么编译器不能像在变量声明中那样在结构成员中设置char[]={..}的大小?Clang++给出以下错误:error:arrayboundcannotbededucedfromanin-classinitializer代码:structA{chars[]={'F','O','O',...};};

C++递归嵌套类型和名称注入(inject)

我尝试用谷歌搜索这个但没有成功,所以我在这里尝试。我有几个类,每个类都定义一个成员structfoo.此成员(member)类型foo本身可以继承自前一个类,因此获得成员类型foo本身。我想访问嵌套的foo使用模板元编程的类型(见下文),但C++名称注入(inject)引入了问题,如上层foo类型名称被注入(inject)较低的foo类型,当我想访问下层时,上层得到解析,比如使用A::foo::foo.这是一个例子:#includestructA;structB;structA{structfoo;};structB{structfoo;};structA::foo:B{};struc

模板类中的 C++ 非模板方法

是否可以在.cpp文件的模板类(结构)中编写非模板方法的实现?我看过模板方法应该写在.h上,但我的方法不是模板方法,虽然它属于模板类。这是我的.h中的代码:#include#ifndefKEY_VALUE_H#defineKEY_VALUE_Husingnamespacestd;namespacetypes{templatestructkey_value{Tkey;Uvalue;statickey_valuemake(Tkey,Uvalue){key_valuekv;kv.key=key;kv.value=value;returnkv;};stringserialize(){//Cod

c++ - 通过 union 在 C 和 C++ 中输入双关结构

我已经在gcc和g++中用pedantic编译了这个,我在任何一个中都没有收到警告:#include#include#includestructa{structa*next;inti;};structb{structb*next;inti;};structc{intx,x2,x3;union{structaa;structbb;}u;};voidfoo(structb*bar){bar->next->i=9;return;}intmain(intargc,char*argv[]){structcc;memset(&c,0,sizeofc);c.u.a.next=(structa*)ca