很久以来我一直想问这个问题。花了一些时间后,我感觉无法获得一种正确的方法来一起检查两个对象是否为null,所以我问它。
例如:我有一个这样的功能
int Function(Object* obj1, Object* obj2)
{
if(obj1 == null && obj2 == null)
{
// Do someting........
}
else if(obj1 == null && obj2 != null)
{
// Do something.....
}
else if(obj1 != null && obj2 == null)
{
// Do something......
}
else
{
// Do something........
}
return 0;
如我们所见,仅检查两个对象的组合是否为空的条件就太多了。
还有其他方法可以更有效地做到这一点,以提高可读性吗?
注意:对象是一个类,没有运算符被重载。
答案 0 :(得分:1)
您最多需要执行两次比较。这就是我的方法:
if( obj1 )
{
if( obj2 )
{
// obj1 and obj2 are both valid.
}
else
{
// obj1 is valid, obj2 is nullptr.
}
}
else
{
if( obj2 )
{
// obj1 is nullptr, obj2 is valid.
}
else
{
// Both are nullptr.
}
}
答案 1 :(得分:-2)
主要思想是减少 if ... else 分支的数量。 也许是某种调度程序,诸如此类:
df.groupby(['year', 'item_id']).sum().reset_index().drop('month', axis=1).set_index('item_id')
year revenue
item_id
1 2013 18.0
2 2013 5.0
3 2013 5.0
1 2014 10.0
其中 f1-f4 是一些功能,例如
int ptr_pair_state(const obj1 *p1, const obj1 *p2)
{
return (p1 ? 1 : 0) | (p2 ? 2 : 0);
}
int Function(Object* obj1, Object* obj2)
{
std::map<int, std::function<void()>> disp{ { 0, f1 }, { 1, f2 }, { 2, f3 }, {3, f4 } };
int state = ptr_pair_state(obj1, obj2);
disp[state]();
}
但是,这似乎是不必要的复杂性,因此,另一个简单的选择-使用switch运算符:
void f1()
{
std::cout << "f1";
}
比无尽的 if ... elif if