使用枚举成员值检查变量值的优化方法

Ras*_*yak 5 c c++ enums

你好,我有以下代码:

enum {a, b, c, d, ..., z} abc;

int main()
{
  int val = 20;
  if (val == a || val == b ||val == c||val == d..... || val == z)
  {
    /*Do something*/
  }
}
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以跳过OR操作,因为如果有1000个枚举成员,那么我们如何才能提前检查所有成员.请帮忙.

Jen*_*edt 5

如果在编译时已知表达式的值,则现代编译器应该能够优化此类代码.为了便于阅读和错误检查,我认为使用a switch会更好:

switch (val)  {
 case a:;
 case b:;
 ....
 // your code goes here
}
Run Code Online (Sandbox Code Playgroud)

如上所述,性能方面不应该有太大区别,如果适当的话,编译器会将其转换为表查找(或其他聪明的东西),或者如果val在编译时已知,则将其完全优化.

但是,您可以在此处获得错误检查编译器的优势.如果您没有default案例,大多数编译器会在您省略其中一个枚举常量时发出警告.此外,我认为这更清楚,因为它不会重复val所有地方的评估.


Ali*_*can 0

由于枚举器值是按顺序分配的,因此放置这样的 if 语句就足够了:

如果(val<=z)

  • 当然。但是,在示例中,它们是按顺序分配的。 (2认同)