在c ++中创建结构的正确方法

时间:2014-10-25 07:04:58

标签: c++ struct

学习C ++时,书籍总是按如下方式创建结构:

struct X{
    int a;
};

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

但我在网上看到了一些C ++代码,人们改为使用以下语法:

struct X y;
struct X *yp;

为什么他们在前面添加结构,并且创建X类对象的两种方法之间有什么区别。

2 个答案:

答案 0 :(得分: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;
}

答案 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在这里是一个不完整的类型,你只能将它用于没有的东西 需要知道它的大小(比如创建一个指针)