2011-11-17 108 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