“struct Obj* obj”和“Obj* obj”之间的区别[重复]

问题描述 投票:0回答:2
struct Element{
    Element() {}
    int data = NULL;
    struct Element* right, *left;
};

struct Element{
    Element() {}
    int data = NULL;
    Element* right, *left;
};

我正在使用二叉树,并且正在查找一个示例。在示例中,

Element* right
struct Element* right
。它们之间有什么区别,哪一种更适合编写数据结构?

我是从这个网站查找的: https://www.geeksforgeeks.org/binary-tree-set-1-introduction/

c++ data-structures binary-tree elaborated-type-specifier
2个回答
1
投票

在 C 中,

struct
关键字必须使用来声明结构变量,但在 C++ 中它是可选(在大多数情况下)。

考虑以下示例:

struct Foo
{
    int data;
    Foo* temp; // Error in C, struct must be there. Works in C++
};
int main()
{
    Foo a;  // Error in C, struct must be there. Works in C++
    return 0;
}

示例2

struct Foo
{
    int data;
    struct Foo* temp;   // Works in both C and C++
};
int main()
{
    struct Foo a; // Works in both C and C++
    return 0;
}

在上面的示例中,

temp
是一个数据成员,它是指向非常量Foo
指针。


此外,我建议使用一些优秀的 C++ 书籍来学习 C++。


0
投票

在 C++ 中,定义类也会定义具有相同名称的类型,因此使用

struct Element
或仅使用
Element
表示相同的事情。

// The typedef below is not needed in C++ but in C to not have to use "struct Element":
typedef struct Element Element;
struct Element {
    Element* prev;
    Element* next;
};

您很少需要在 C++ 中使用

struct Element
(定义中除外)。

但是,在一种情况下您确实需要它,那就是当您需要消除同名类型和函数之间的歧义时:

struct Element {};
void Element() {}

int main() {
    Element x;  // error, "struct Element" needed
}
© www.soinside.com 2019 - 2024. All rights reserved.