2011-11-17 106 views
1

因此,可以声明匿名类或结构,但是如何让它变得有用?如何使用匿名结构或类?

int main() { 
    class{ 
     int ClassVal; 
    }; 
    struct{ 
     short StructVal; 
    }; 
    StructVal = 5; //StructVal is undefined 
    ClassVal = 5; //ClassVal is undefined too? 
    return 0; 
} 

如果你把它们都放在main函数之外,它们也是不可访问的。 我问这不仅是因为它以某种方式野趣:)

编辑: 为什么主要功能(在全局范围)之外的工会必须是静态的声明 例如:

static struct { 
    int x; 
}; 
int main() { 
    //... 
} 
+0

如果您能说出您正在使用的语言,这将有所帮助。 –

+0

@skaffman,我正在使用C++,我把C++标签放在了我的文章的下面。谢谢。 – codekiddy

回答

4

匿名类和结构可以被用来直接定义一个变量:在他的回答由Simon里克特描述工会使用时

int main() 
{ 
    class 
    { 
     int ClassVal; 
    } classVar; 

    struct 
    { 
     short StructVal; 
    } structVar; 

    structVar.StructVal = 5; 
    classVar.ClassVal = 5; 

    return 0; 
} 

上面不是很常见那样的,但很常见的。

3

这些都是最有用在嵌套structunion形式:

struct typed_data { 
    enum type t; 
    union { 
     int i;      // simple value 
     struct { 
      union {     // any of these need a length as well 
       char *cp; 
       unsigned char *ucp; 
       wchar_t *wcp; 
      }; 
      unsigned int len; 
     }; 
    }; 
}; 

现在typed_data被声明为与构件一个类型,icp,ucp,wcplen,对其预期用途的储存要求最低。

+0

这意味着它们只能在另一个类/结构/联合中使用,但不能在函数内或全局范围内使用?如果是的话,为什么我们可以在全球范围内宣布一个一致的阶级呢?为什么在这种情况下的联合必须是静态的,而class/struct不是?以及为什么这样的类/结构不能使用它们,非常感谢。 – codekiddy

+0

仅仅因为你可以不意味着它是有道理的 - 在C/C++中存在很多构造主要是因为它会使语法规则更加复杂以禁止它们。 –

+0

那么C++就是一种外交语言,意思是说:有些部分总是难以理解:D – codekiddy