当我学习C++时,对一段C++代码感到困惑,有人能在这方面帮助我吗? 提前谢谢你。
struct LinkNode
{
int data;
struct LinkNode* next; // Why there use `struct` type define LinkNode again?
};
作为我的评论,为什么还要使用struct
类型来定义LinkNode呢? 我认为codestruct LinkNode{}
已经定义了一个LinkNode。 当然,如果我像下面这样更改代码,它也可以正常工作,没有任何编译错误。
struct LinkNode
{
int data;
LinkNode* next; // No any compilation errors either.
};
C++中Struct的类型重定义?
这不是类型重定义。 这称为详细类型说明符。 它可以用来消除类名与隐藏它的另一个名称之间的歧义。 在这种情况下没有必要使用它。 它也不会打破任何东西来使用它。
该代码也可以为C语言中可用的API编写。 在C语言中,这是必要的。
在代码中
struct LinkNode
{
int data;
struct LinkNode* next; // Why there use `struct` type define LinkNode again?
};
行struct linknode*next;
未定义新类型。 它声明了一个(已经存在的)类型linknode
的成员变量next
。
这里让您感到困惑的可能是关键字struct
,正如您已经知道的那样,该关键字在此上下文中完全是可选的。 允许您首先在这里放置struct
的原因是源于C.C区分标记名和类型名。 C语言中struct Foo{};
形式的声明只引入了标记名Foo
,而不引入类型名。 这意味着,要在C语言中实例化Foo
对象,需要编写structfoo f;
,其中包含struct
关键字,以便将标记名转换为相应的类型。
要在C语言中获得正确的类型名称,您必须使用typedef:typedef struct Foo footype;
,然后您只需编写footype f;
即可。 由于标记名和类型名之间的这种区别在实践中被证明不是很有用,C++简单地摆脱了这种区别,允许使用您熟悉的更简单的声明表示法。