学习C ++时,书籍总是按如下方式创建结构:
struct X{
int a;
};
X y;
X *yp; // pointer to object of X class
但我在网上看到了一些C ++代码,人们改为使用以下语法:
struct X y;
struct X *yp;
为什么他们在前面添加结构,并且创建X类对象的两种方法之间有什么区别。
答案 0 :(得分:1)
在C ++(而不是C)中,当X
是结构类型时,你大多只能写X
。你仍然需要写struct X
X
时。最后一点的例子:
friend
声明中,第一点的例子:
struct A {};
void A() {}
auto main() -> int
{
void (*f)() = &A;
//A x; // !nyet
struct A x;
}
答案 1 :(得分:1)
这是C的遗产。在C中,代码如下:
struct Foo
{
int a;
};
创建了一个结构体,并将其标记“Foo
”放入其自己的“标记名称空间”中
访问它的唯一方法是:
struct Foo foo;
或者,更常见的是:
typedef struct Foo Foo;
Foo foo;
但是,在C ++中,标记不仅放在单独的标记命名空间中,而且还放在单独的标记命名空间中
在封闭的命名空间中。但为了向后兼容,它仍然允许你
使用struct Name
在C和C ++中还有一个构造struct Name
的额外用法
这是一个前瞻性宣言:
struct Later;
Later
在这里是一个不完整的类型,你只能将它用于没有的东西
需要知道它的大小(比如创建一个指针)