【问题标题】:Explicitly declaring an enumeration with a type definition in C++: is that necessary?在 C++ 中使用类型定义显式声明枚举:有必要吗?
【发布时间】:2020-08-12 02:02:00
【问题描述】:

我想知道C++声明是否

enum colour {blue, green, red};

typedef enum {blue, green, red} colour;

一旦枚举本身就是一种类型,就等价了,正如我从What types in C++ are enumerated types? 中的答案和参考资料中所理解的那样。 我在我正在研究的一些代码中遇到了后一个声明。

这两个声明在含义、表达性(例如,清晰度)或它们在编码时打开的可能性方面是否不同?

【问题讨论】:

  • 这主要是从 C 中继承而来,人们厌倦了一直写enum colour

标签: c++ enums declaration typedef enumeration


【解决方案1】:

这两种声明的区别

enum colour {blue, green, red};

typedef enum {blue, green, red} colour;

对名称查找的影响。

对于第一个声明,即使名称 colour 被隐藏,您也可以使用详细名称 enum colour

这是一个演示程序

#include <iostream>

enum colour {blue, green, red};

int colour;

enum colour c = red;

int main() 
{
    return 0;
}.

事实上,对于第一个声明,您引入了两个名称:enum colourcolour

对于 typedef 声明,标签名称被省略。所以你不能使用详细的名称。

如果没有关键字 enum,您也不能使用不透明的 enum 声明。而且您可能不会引入范围枚举,例如

enum class colour {blue, green, red};

【讨论】:

  • 解释一下enum class colour {blue, green, red}; 允许您写colour::blue 可能会很有用。这就是为什么你不能省略colour,这是作用域枚举的作用域名称。
  • @MSalters 在他的示例中使用了一个无范围的枚举。:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 1970-01-01
  • 2015-04-26
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
  • 2022-01-23
相关资源
最近更新 更多