是的,它是有效的。
在 Bjarne Stroustrup 的《 The C++ Programming Language (3rd Edition)》一书中有一个使用它的例子,“6.1 A Desk Calculator [expr.calculator]”一节(更准确地说是“6.1.1 The Parser [expr.parser]” ),用于简单算术计算器的解析器代码。这是一段摘录:
解析器使用一个函数get_token()
来获取输入。最近调用的值get_token()
可以在全局变量中找到curr_tok
。的类型curr_tok
是枚举Token_value
:
enum Token_value {
NAME, NUMBER, END,
PLUS='+', MINUS='-', MUL='*', DIV='/',
PRINT=';', ASSIGN='=', LP='(', RP=')'
};
Token_value curr_tok = PRINT;
用字符的整数值来表示每个标记既方便又高效,并且可以帮助使用调试器的人。只要用作输入的字符没有用作枚举器的值,并且我所知道的没有字符集具有具有个位数整数值的打印字符,这就会起作用。(...)
(最后一句特定于此示例,因为枚举混合了“默认值”和“显式值”枚举器,并希望每个枚举器都是唯一的。)
然而,这只是一个有教育意义的例子(特别是它使用全局变量,当您应该为宏保留枚举器时,它使用 CAPS 名称(但 Stroustrup 不喜欢宏:p))。
现在,确实你不能迭代它(至少用一个普通的for
循环;但是看这个问题)。(正如 James Kanze 指出的那样,枚举的值并不总是有序、连续和唯一的。)