D语言中国主页  D语言编辑器SciTE4D   DWin库 D语言官方网站
D语言编译器1.x最新版 OpenSource   Tango   webnews  Wiki

查看完整版本: 13 D语言 结构 联合Structs & Unions

yidabu 2007-4-26 15:47

13 D语言 结构 联合Structs & Unions

13 D语言 结构 联合Structs & Unions知识若不分享 实在没有意义 http://www.d-programming-language-china.org 20070423点击下面网址查看原文:http://www.d-programming-language-china.org        by:        uFramer        D语言论坛 http://www.d-programming-language-china.org        from:        http://www.digitalmars.com/d/struct.html        version:        基于D 1.013        (Apr 19, 2007)        Whereas classes are reference types, structs are value types. Any C struct can be exactly represented as a D struct. In C++ parlance, a D struct is a POD (Plain Old Data) type, with a trivial constructors and destructors. Structs and unions are meant as simple aggregations of data, or as a way to paint a data structure over hardware or an external type. External types can be defined by the operating system API, or by a file format. Object oriented features are provided with the class data type.        A struct is defined to not have an identity; that is, the implementation is free to make bit copies of the struct as convenient.        Struct, Class Comparison Table Feature struct class C struct C++ struct C++ class                Struct, Class Comparison Table                Feature        struct        class        C struct        C++ struct        C++ class                        value type        X                 X        X        X                        reference type                 X                                                   data members        X        X        X        X        X                        hidden members                 X                 X        X                        static members        X        X                 X        X                        default member initializers        X        X                                                   bit fields                          X        X        X                        non-virtual member functions        X        X                 X        X                        virtual member functions                 X                 X        X                        constructors                 X                 X        X                        destructors                 X                 X        X                        RAII                 X                 X        X                        operator overloading        X        X                 X        X                        inheritance                 X                 X        X                        invariants        X        X                                                   unit tests        X        X                                                   synchronizable                 X                                                   parameterizable        X        X                 X        X                        alignment control        X        X                                                   member protection        X        X                 X        X                        default public        X        X        X        X                                 tag name space                          X        X        X                        anonymous        X                 X        X        X                        结构的声明:        QUOTE:                                AggregateDeclaration:                    Tag { DeclDefs }                    Tag Identifier StructBody                    Tag Identifier ;                                Tag:                    struct                    union                                StructBody:                    { }                    { StructBodyDeclarations }                                StructBodyDeclarations:                    StructBodyDeclaration                    StructBodyDeclaration StructBodyDeclarations                                StructBodyDeclaration:                    Declaration                    StaticConstructor                    StaticDestructor                    Invariant                    UnitTest                    StructAllocator                    StructDeallocator                                StructAllocator:                    ClassAllocator                                StructDeallocator:                    ClassDeallocator                它们同在 C 中的结构基本一样,除了以下一些例外:        没有位域        可以显式指定对齐        没有单独的标记名字空间 —— 标记名并入当前的作用域        如下面这样的声明:        [Copy to clipboard] [ - ]CODE:                                struct ABC x;                不允许这样使用:( 本文出处: http://www.d-programming-language-china.org )        [Copy to clipboard] [ - ]CODE:                                ABC x;                匿名结构/联合可以作为其他结构/联合的成员存在        可以为成员提供默认初始值        可以拥有成员函数和静态成员Static Initialization of Structs结构的静态初始化        如果不提供初始值,静态结构成员会被默认地初始化为成员类型的初始值。如果提供了静态初始值,成员会按照这样的语法初始化:成员名,冒号,表达式。成员可以按照任意顺序初始化。没有出现在初始化列表中的成员会被默认值初始化。( 本文出处: http://www.d-programming-language-china.org )        [Copy to clipboard] [ - ]CODE:                                struct X { int a; int b; int c; int d = 7;}                static X x = { a:1, b:2};            // c 被设置为 0, d 为 7                static X z = { c:4, b:5, a:2 , d:5};            // z.a = 2, z.b = 5, z.c = 4, z.d = 5                C 风格的初始化,依赖于结构声明中的成员的顺序,也是被支持的:        [Copy to clipboard] [ - ]CODE:                                static X q = { 1, 2 };        // q.a = 1, q.b = 2, q.c = 0, q.d = 7        Static Initialization of Unions联合的静态初始化        联合需要显式地初始化。        [Copy to clipboard] [ - ]CODE:                                union U { int a; double b; }                static U u = { b : 5.0 };        // u.b = 5.0                如果联合的其他成员占用的存储空间更大,剩下的部分被初始化为零。( 本文出处: http://www.d-programming-language-china.org )Dynamic Initialization of Structs结构的动态初始化        结构可以被同类型值动态初始化:        [Copy to clipboard] [ - ]CODE:                                struct S { int a; }                S t;    // default initialized                t.a = 3;                S s = t;    // s.a is set to 3                If opCall is overridden for the struct, and the struct is initialized with a value that is of a different type, then the opCall operator is called:        [Copy to clipboard] [ - ]CODE:                                struct S                {    int a;                                    static S opCall(int v)                    {    S s;                    s.a = v;                    return s;                    }                                    static S opCall(S v)                    {    S s;                    s.a = v.a + 1;                    return s;                    }                }                                S s = 3;    // sets s.a to 3                S t = s;    // sets t.a to 3, S.opCall(s) is not called        Struct Properties结构属性        .sizeof                        以字节为单位的结构大小        .alignof                        要对齐到的边界值        .tupleof                Gets type tuple of fieldsStruct Field Properties结构域属性        .offsetof        从结构开始的字节偏移量                                of struct( lastupdate:20070426 最新文章请访问http://www.d-programming-language-china.org )关于一大步成功社区:yidabu提倡在交流中学习,在分享中提高收集感兴趣的知识,写下心得,通过网络与别人一起分享理解一点就实践一步,收获什么就分享什么,成功就是这样一点点一步步累积起来的网络只是一个工具,只有自己身心提高才是实实在在的。d-programming-language-china.org为大家提供一个学习交流各种知识的平台
页: [1]
查看完整版本: 13 D语言 结构 联合Structs & Unions