创建对象的副本以进行多重比较是一种很好的做法
Creating a copy of the object for multiple comparison is a good practice?
>假设一次需要多个比较:
enum usermode
{
active,
standingby,
inactive,
dead,
// many other modes....
};
class A
{
public:
usermode mode;
};
函数继承指向类 A 的指针(ptr 指向 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...
}
由于 mode
只是类的成员变量,任何像样的编译器都会为这两种实现生成相同的代码。但是,通常,如果使用方法而不是字段(尤其是具有副作用的方法),则这两种方法并不等效。
函数调用与局部变量中有更多详细信息
如果您的类有一个直接处理这个问题的方法,可能会更好
bool A::IsSomeState() const
{
return mode == active || mode == standingby; // Etc
}
相关文章:
- 寻找一种更好的方法来表示无符号字符数组
- 使用移位的无符号数字作为数组的索引号是一种很好的做法
- C++|以一种很好的方式将树(不一定是二进制的)打印到stdout
- 接口在C++中是一种很好的做法吗?
- 为许多类可能需要的所有常量变量制作独立的头文件是否是一种很好的做法?
- 需要帮助从12个字节生成新的24字节RGB查找阵列,或者是一种更好的编码方法
- 有没有一种很好的方法来实现具有默认失败情况的条件类型?
- 是否有一种很好的方法可以将STD :: Minmax(A,B)分配给STD :: TIE(A,B)
- 需要一种更好的方法来编写电源函数
- 有没有一种很好的跨平台方法可以使用CMake包含外部C++库
- 创建对象的副本以进行多重比较是一种很好的做法
- 如何正确地对数据开始指针进行类型转换(这是一种很好的做法吗)
- 在析构函数中调用函数是一种很好的做法
- 使用 std::正则表达式进行简单的 RX 是一种很好的做法
- C++内置的封闭就是一种很好的做法
- 指向类的C++指针,调用释放类实例的函数,就是一种很好的做法
- 这是一种很好的OO方法(c++)
- 如何以一种很好的方式禁用OpenMP指令
- 在 std::map 的值中使用非 ptr 是一种很好的做法吗
- 一种更好的数组移位算法