gpt4 book ai didi

c++ - 此 switch 语句中的代码味道?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:12:10 24 4
gpt4 key购买 nike

我想知道应该在哪里将这种样式的 switch 语句更改为 if else 语句。

switch (foo) // foo is an enumerated type
{
case barOne:
if (blahOne)
{
DoFunction(//parameters specific to barOne);
break;
}
case barTwo:
if (blahTwo)
{
DoFunction(//parameters specific to barTwo);
break;
}
//etc.
default:
// Whatever happens if none of the case's conditionals are met
}

除非满足其中一种情况的条件,否则基本上会失败。这些情况非常相似,只是需要检查什么和需要传递什么不同,这就是我使用 switch 语句的原因。

使用 if else if 会更好吗?否则,它是否足够清晰以保留,但又不够清晰以保证对 fallthrough 发表评论?多态性也始终是一种选择,但对我来说似乎有点矫枉过正。

最佳答案

在某些情况下,这似乎会做一些奇怪的事情。如果 foo == bar1,并且 blahOne 为假,但 blahTwo 为真怎么办?然后你会失败并调用 foo == bar2 情况下的函数,即使 foo 不等于 bar2。

这在实践中可能出乎意料,但如果真的发生了,调试起来可能会很困难。在这种情况下,我会投票给 if else,因为流程更简单。

if (foo == barOne && blahOne)
{
DoFunction(/*parameters specific to barOne*/);
}
else if (foo == barTwo && blahTwo)
{
DoFunction(/*parameters specific to barTwo*/);
}
else
{
// Handle the fallthrough case.
}

当然,如果意图是即使 foo != barTwo 也可以计算 blahTwo,那么转换可能是最好的方法,但在这种情况下我肯定会赞成一些解释性评论。

关于c++ - 此 switch 语句中的代码味道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1794689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com