【发布时间】:2011-08-05 12:31:08
【问题描述】:
假设我有两个布尔变量,我想根据它们的值做完全不同的事情。实现这一目标的最干净的方法是什么?
变体 1:
if (a && b)
{
// ...
}
else if (a && !b)
{
// ...
}
else if (!a && b)
{
// ...
}
else
{
// ...
}
变体 2:
if (a)
{
if (b)
{
// ...
}
else
{
// ...
}
}
else
{
if (b)
{
// ...
}
else
{
// ...
}
}
变体 3:
switch (a << 1 | b)
{
case 0:
// ...
break;
case 1:
// ...
break;
case 2:
// ...
break;
case 3:
// ...
break;
}
变体 4:
lut[a][b]();
void (*lut[2][2])() = {false_false, false_true, true_false, true_true};
void false_false()
{
// ...
}
void false_true()
{
// ...
}
void true_false()
{
// ...
}
void true_true()
{
// ...
}
对于普通程序员来说,变体 3 和 4 是否过于棘手/复杂?我错过了任何其他变体?
【问题讨论】:
-
你为什么想做 3 或 4?对我来说看起来很可怕:)
标签: c++ if-statement function-pointers switch-statement control-flow