gpt4 book ai didi

c++ - 声明和定义结构有什么区别?

转载 作者:可可西里 更新时间:2023-11-01 18:41:49 26 4
gpt4 key购买 nike

struct {
char a;
int b;
} x;

为什么要定义这样的结构而不是将其声明为:

struct x {
char a;
int b;
};

最佳答案

在第一种情况下,只有变量 x 可以是该类型——严格来说,如果您定义了另一个结构体 y 具有相同的主体,那将是不同的类型。因此,当您永远不需要任何其他相同类型的变量时,就可以使用它。请注意,您不能将事物转换为该类型,不能使用使用该类型的原型(prototype)声明或定义函数,甚至不能动态分配该类型的变量 - 没有要使用的类型的名称。

在第二种情况下,您没有定义变量 - 您只需定义一个类型 struct x,然后可以使用它来创建该类型所需的任意数量的变量。当然,这是更正常的情况。它通常与 typedef 结合或关联:

typedef struct x
{
char a;
int b;
} x;

通常,您会使用信息量更大的标签名称和类型名称。对结构标记(第一个“x”)和 typedef 名称(第二个“x”)使用相同的名称是完全合法和安全的。

对于一阶近似,当您使用普通的“struct x { ... };”时,C++ 会自动为您“创建一个 typedef”符号(无论您是否同时定义变量)。有关与术语“一阶近似”相关的警告的相当完整的详细信息,请参阅下面的广泛评论。感谢所有帮助我澄清这一点的评论员。

关于c++ - 声明和定义结构有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1423786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com