以下结构是同一类型的吗

Are the following structs the same type?

本文关键字:类型 结构      更新时间:2023-10-16

我有一个结构定义如下:

typedef struct {
    string foo;
} A, B;

我还有一组功能如下:

void Init(A *p) {
    p->foo;
}
void Init(B *p) {
    p->foo;
}

gcc抱怨Init正在被重新定义。我可以简单地删除第二个Init函数吗?A和B是同一种类型吗?

是的,A和B本质上是同一类型的不同别名。

我认为,如果给结构本身起一个名字,并将Init定义为一个带指针的函数,代码会更清楚:

struct MyStruct{
    string foo;
};
typedef MyStruct A, B;
void Init(MyStruct *p) {
    p->foo;
}

不过这只是个人喜好。

是。B是结构定义上定义的A的别名

它们都是一样的。在C中由于它们在结构上相同,在C++中,因为A被视为联系目的;这几乎和你写的一样:

struct A { string foo; };
typedef A B;