假设一次需要多个比较:

enum usermode
{
    active,
    standingby,
    inactive,
    dead,
    // many other modes....
};
class A
{
public:
    usermode mode;
};


函数继承了指向类A的指针(ptr指向A)

方法A:

if( ptr->mode == active || ptr->mode == standingby || ptr->mode == inactive || ptr->mode == dead ...//etc )
{
    //do something
}


方法B:

usermode cmpmode = ptr->mode;
if( cmpmode == active || cmpmode == standingby || cmpmode == inactive || cmpmode == dead ...//etc )
{
    //do something
}


这样做是一种好习惯吗?

最佳答案

在这种情况下,它只是减少了if语句表达式中的字符数,因此任何有效且最易读的内容。

但是,在检查函数的返回值的情况下,我会将其填充到变量中并进行检查,即

auto ret = SomePossiblyExpensiveOperation();
if(ret != whatever && ret < something) {
    //...
}


以您的if陈述为准,我会这样做:

switch(ptr->mode) {
    case active:
    case standingby:
    case inactive:
    case dead:
        ptr->whatever();
        break;
    // other cases
    default:
        // something else
        break:
}


如果这是一项常见检查,则您可能要为此做一个特殊情况,即

usermode any_mode = active | standingby | inactive | dead;

//...

if(ptr->mode & any_mode) {
    // whatever...
}

关于c++ - 创建对象拷贝以进行多次比较是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12539115/

10-10 02:23