我理解第一个,但第二个?你何时以及为什么这样做?
enum cartoon { HOMER, MARGE, BART, LISA, MAGGIE };
enum { HOMER, MARGE, BART, LISA, MAGGIE };
Run Code Online (Sandbox Code Playgroud)
dav*_*vka 29
你可以在一个类中定义这样的枚举,它给它一个范围,并有助于暴露类的功能,例如
class Encryption {
public:
enum { DEFAUTL_KEYLEN=16, SHORT_KEYLEN=8, LONG_KEYLEN=32 };
// ...
};
byte key[Encryption::DEFAUTL_KEYLEN];
Run Code Online (Sandbox Code Playgroud)
这只是创建具有相应值的常量表达式,而不是简单的类型int,因此您不能使用未命名的枚举作为任何类型的类型,您将不得不简单地接受a int然后与常量进行比较.
像这样的东西:
void doSomething(int c);
Run Code Online (Sandbox Code Playgroud)
这样的事情:
void doSomething(cartoon c);
Run Code Online (Sandbox Code Playgroud)
顺便说一下,你的实现是一样的,所以在未命名的枚举的情况下,唯一真正的缺点是强类型.
第二个是未命名的enum.当你需要字段时我会很有用,但你不打算声明这个枚举类型的变量.
为了提供一个"非常C++"的使用示例,您经常会在模板元编程中看到这一点,其中枚举被用作"编译时返回值",而无意声明此类型的变量:
template<class T>
struct some_metafunction
{
enum { res = 0; };
};
Run Code Online (Sandbox Code Playgroud)
小智 7
我只是提供了一个现实生活中使用匿名枚举的示例,这是我在嵌入式项目中遇到的。项目中使用了 EEPROM 来存储一些参数。让我们假设这些参数是那些纸箱字符的年龄,每个参数在连续地址中的大小为 1 个字节。
当处理器上电时,这些参数被复制到存储在 ROM 中的数组中。
uint8_t ROM_AGE[END_AGE]
Run Code Online (Sandbox Code Playgroud)
如果我们在这里定义一个匿名枚举:
enum { HOMER_AGE, MARGE_AGE, BART_AGE, LISA_AGE, MAGGIE_AGE, END_AGE };
Run Code Online (Sandbox Code Playgroud)
那么 enum 中的关键字可以用来索引每个字符的年龄,比如ROM_AGE[HOMER_AGE]. 通过使用这个枚举,可读性比使用ROM_AGE[0].
| 归档时间: |
|
| 查看次数: |
13467 次 |
| 最近记录: |