При изучении C++ книги всегда создают структуры следующим образом:
struct X{
int a;
};
X y;
X *yp; // pointer to object of X class
Но я видел код C++ онлайн, где люди вместо этого используют следующий синтаксис:
struct X y;
struct X *yp;
Почему они добавляют структуру вперед и есть ли разница между двумя методами создания объектов класса X.
В C++ (в отличие от C) вы можете просто написать X
когда X
- тип структуры. Вам все равно нужно написать struct X
X
еще не объявлен.Примеры последней точки:
friend
,Пример первой точки:
struct A {};
void A() {}
auto main() -> int
{
void (*f)() = &A;
//A x; // !nyet
struct A x;
}
Это наследие от 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
здесь неполный тип, вы можете использовать его только для вещей, которые не
необходимо знать его размер (например, создание указателя)