关键字枚举在 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
无论如何这仍然不是一个很大的好处,而且这样更简洁。
另一方面,如果您使用枚举,您必须记住您始终如一地使用它,否则您将拥有两个版本,这可能会导致混淆和(在最坏的情况下)意想不到的副作用,尤其是在共享与多个开发人员一起编写代码。
我知道在 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
无论如何这仍然不是一个很大的好处,而且这样更简洁。
另一方面,如果您使用枚举,您必须记住您始终如一地使用它,否则您将拥有两个版本,这可能会导致混淆和(在最坏的情况下)意想不到的副作用,尤其是在共享与多个开发人员一起编写代码。