Правильный способ создания структур в с ++

0

При изучении C++ книги всегда создают структуры следующим образом:

struct X{
    int a;
};

X y; 
X *yp; // pointer to object of X class

Но я видел код C++ онлайн, где люди вместо этого используют следующий синтаксис:

struct X y;
struct X *yp;

Почему они добавляют структуру вперед и есть ли разница между двумя методами создания объектов класса X.

Теги:
struct

2 ответа

1
Лучший ответ

В C++ (в отличие от C) вы можете просто написать X когда X - тип структуры. Вам все равно нужно написать struct X

  • для устранения неоднозначности в некоторых редких случаях и
  • когда X еще не объявлен.

Примеры последней точки:

  • в декларации friend,
  • как тип id для шаблона,
  • с обычной идиомой PIMPL ,

Пример первой точки:

struct A {};
void A() {}

auto main() -> int
{
    void (*f)() = &A;
    //A x;  // !nyet
    struct A x;
}
  • 0
    Извините за точку с надписью PIMPL. Не уверен, о чем я думал.
1

Это наследие от C. In C, следующий код:

struct Foo
{
    int a;
};

создал структуру и поместил свой тег " Foo " в собственное "пространство имен тегов",
единственный способ доступа к нему - сделать:

struct Foo foo;

Или, что более распространено:

typedef struct Foo Foo;
Foo foo;

Однако в C++ тег не просто помещается в отдельное пространство имен тегов, но также
в охватывающем пространстве имен. Но для обратной совместимости он все же позволяет вам
получить доступ к нему с помощью struct Name

Существует дополнительное использование имени struct Name, как в C, так и C++
и это является прямым выражением:

struct Later;

Later здесь неполный тип, вы можете использовать его только для вещей, которые не
необходимо знать его размер (например, создание указателя)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню