关键字枚举在 C++ 中开始函数定义

Keyword enum starting a function definition in C++

我知道在 C 和 C++ 中,您可以使用 enum 关键字枚举命名常量:

enum { RED, GREEN, BLUE };

如果您不为名称分配常量,编译器会逐步分配,从 0 开始为每个新枚举分配常量。

现在让我们看看不同之处:

enum COLOR { RED, GREEN, BLUE };

在C中,COLOR就是所谓的"tag"。它不能直接用于变量或 return 类型声明。相反,你必须在它前面加上 enum 关键字(或者先为它创建一个 typedef):

enum COLOR someCFunction();

在 C++ 中,枚举名称是正确的类型名称,因此 enum 不是必需的。

但您仍然可以包含它,而且它在语法上似乎是正确且无害的:

enum COLOR someCppFunction();

我应该在 C++ 代码中的枚举名称之前保留 enum 关键字 ("for compatibility reasons") 吗?

因为你可以在 c 中做到这一点

typedef enum Color Color;
enum Color {Red, Green, Blue, White, Black};

然后将 Color 中的 enum 声明为

Color color;

那么,语言不是更改语法的正确标准,如果存在,可能是故意让 reader 意识到这些变量是 enum 的事实.

有什么好处?仅当您在不同的项目中使用 C 和 C++ 编译器编译源代码时,才有好处。因为你也可以在 C 中使用 typedef 无论如何这仍然不是一个很大的好处,而且这样更简洁。

另一方面,如果您使用枚举,您必须记住您始终如一地使用它,否则您将拥有两个版本,这可能会导致混淆和(在最坏的情况下)意想不到的副作用,尤其是在共享与多个开发人员一起编写代码。