typedef enum 和 enum class 有什么区别?

3

我可能缺少某些东西,但我正在使用一个代码库,它使用了很多

typedef enum foo
{
    ....
} foo;

这只是普通的枚举类,不具备强类型的特性吗?

不,这是一个常规的枚举。在C++中,这个“typedef”没有任何用处(但在C中有用)。 - UnholySheep
请查看 https://dev59.com/-2Ml5IYBdhLWcg3wgnSl,它应该能回答你的问题。 - cigien
这个回答解决了你的问题吗?为什么枚举类优于普通枚举? - Adrian Mole
1个回答

8

typedef enumenum class的使用有所不同。

正如评论中@UnholySheep提到的那样,typedef enum的使用大多是C语言中的习惯用法,在C++中并不需要。在C语言中,如果你这样声明一个enum

enum Ghost {
    Blinky,
    Pinky,
    Inky,
    Clyde
};

如果要声明一个类型为Ghost的变量,您需要这样写:

enum Ghost oneGhost;

在这里使用"enum"可能会有些烦人,因此出现了一种模式,可以将enum声明写成:
typedef enum Ghost {
    Blinky,
    Winky,
    Pinky,
    Clyde
} Ghost;

这里说“有一种类型称为 enum Ghost,像往常一样定义,但你可以简称为Ghost。这样,在C语言中,你可以写成:”。
Ghost myGhost;

而在C++中,不再需要使用enum来定义枚举类型。如果您使用第一个(没有typedef)版本的代码定义了一个Ghost,那么只需使用Ghost myGhost;即可。因此,在C++中使用typedef enum的原因并不多。

这与enum class有很大不同。在C++中,enum class的优点是枚举中定义的常量不会成为定义enum的命名空间的一部分,并且不能从enum class隐式地转换为整数类型。因此,enum class主要是为了类型安全和防止在使用enum时犯错误。

希望这能帮到您!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接