struct和enum之间的区别?

时间:2013-12-19 11:47:58

标签: c++

我是C ++的新手,想要了解说

之间的区别
typedef enum stateUpdateReasonCode
{
    a=1,
    b=2,
    c=3
} StateUpdateReasonCode;

struct StateUpdateReasonCode
{
   a=1,
   b=2,
   c=3
};

他们之间有什么区别?我们会使用一个吗?

亲切的问候

4 个答案:

答案 0 :(得分:13)

枚举和结构是完全不同的概念,实现不同的目的。

enum允许您声明一系列标识符,以便在您的代码中使用。编译器会为您替换数字。它通常对于使代码更具可读性和可维护性非常有用,因为您可以使用描述性名称而不会影响字符串比较的性能。它还可以使代码更容易出错,因为您不必在任何地方继续写特定的数字,如果数字发生变化可能会出错。

struct是一种数据结构。最简单的是,它包含零个或多个数据(变量或对象),组合在一起,以便它们可以作为一个单元进行存储,处理或传递。您通常可以拥有多个副本(或实例)。结构可能要复杂得多。它实际上与一个类完全相同,除了成员默认是公共的而不是私有的。像类一样,struct可以有成员函数和模板参数等等。

结构和枚举之间的重要区别之一是运行时不存在枚举。只有在您阅读/编写代码时才能获益。但是,结构(和类)的实例肯定可以在运行时存在于内存中。

从编码的角度来看,枚举中的每个标识符都没有自己的类型。结构中的每个成员必须具有类型。

答案 1 :(得分:9)

第一次编译,第二次没编。

您的struct声明无效。在普通C struct中所谓的记录类型,它们包含一组值(每个值都有自己的类型)。在C ++中,此功能已扩展,struct基本上等同于class。结构现在可以有基类,成员函数,访问说明符,转换运算符,运算符重载等等。

枚举是一种枚举类型:它描述了一组有限的状态。在C和C ++中,枚举值可以转换为整数的事实或多或少是一个泄漏的抽象。

它们根本不同。

答案 2 :(得分:3)

您的“struct”不是结构,也不会编译 - 您无法在原位分配它。它应该是一个数据结构,例如:

struct Car
{
 float enginesize;
 char modelname[100];
};

在声明Car等类型的变量

之后,您将分配这些值

然而,枚举是重命名的数值:它是命名数字常量的一种非常方便的方法。

答案 3 :(得分:2)

枚举的工作类似于要用单词指定值的常量。就像第一周的日子一样,希望sun = 0,mon = 1,依此类推。在这种情况下,可以使用枚举。

struct与enum完全不同。可以看出类似于c ++中的类或任何其他编程语言。 structure是用户定义的数据类型,可用于存储信息。在地址中,不同的字段可以是街道,邮政编码等。

第一个编译,因为它存储枚举的值,第二个不编译,因为结构变量数据成员值可以通过创建结构变量来分配。