Как использовать анонимную структуру или класс? - PullRequest
1 голос
/ 17 ноября 2011

Итак, можно объявить анонимный класс или структуру, но как мне сделать это полезным?

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

если вы поместите их обоих вне основной функции, они также будут недоступны. Я спрашиваю это только потому, что это как-то интересно :) 1004 *

EDIT: Почему объединение вне основной функции (в глобальной области видимости) должно быть объявлено статически например:

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

Ответы [ 2 ]

5 голосов
/ 17 ноября 2011

Анонимные классы и структуры могут использоваться для непосредственного определения переменной:

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

    struct
    {
        short StructVal;
    } structVar;

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

    return 0;
}

Вышеупомянутое не так часто встречается, но очень часто, когда используется в союзах, как описано Саймоном Рихтером в его ответе.

3 голосов
/ 17 ноября 2011

Они наиболее полезны в виде вложенных struct и union:

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 объявлен как тип с элементами t, i, cp, ucp, wcp и len, с минимальными требованиями к хранению для его предполагаемого использования.

...