作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
您好,我有以下代码:
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*/
}
}
有没有其他方法可以跳过 OR
操作,因为如果有 1000 个枚举成员,那么我们如何提前检查所有成员。请帮忙。
最佳答案
现代编译器应该能够优化这样的代码,就像你的情况一样,表达式的值在编译时是已知的。对于可读性和错误检查,我认为使用 switch
会更好:
switch (val) {
case a:;
case b:;
....
// your code goes here
}
如前所述,在性能方面应该没有太大区别,编译器会在适当的时候将其转换为表查找(或其他聪明的东西),或者如果 val
已知,则完全优化它编译时间。
但是您可以在这里享受错误检查编译器的优势。如果您没有default
大小写,那么如果您省略其中一个枚举常量,大多数编译器都会警告您。此外,我认为这更清楚,因为它不会在整个地方重复 val
的评估。
关于c++ - 使用枚举成员值检查变量值的优化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12928733/
我是一名优秀的程序员,十分优秀!