假设一次需要多个比较:
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
}这样做是一种好的做法吗?
发布于 2012-09-22 06:55:37
在这种情况下,它只是减少了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...
}发布于 2012-09-22 06:56:48
由于mode只是该类的一个成员变量,因此任何像样的编译器都会为两种实现生成相同的代码。但是,通常情况下,如果您使用方法而不是字段(尤其是有副作用的方法),这两种方法是不等价的。
有关这一点的更多细节,请访问Function calls vs. local variables
发布于 2012-09-22 06:56:06
如果您的类有一个直接处理此问题的方法,可能会更好
bool A::IsSomeState() const
{
return mode == active || mode == standingby; // Etc
}https://stackoverflow.com/questions/12539115
复制相似问题