【问题标题】:Switch statement fallthroughSwitch 语句失败
【发布时间】:2020-01-09 16:04:28
【问题描述】:

我正在研究光线追踪器,并且正在尝试实现采样。现在我有一个代表采样类型的枚举,为了简单起见,我们称它们为“一”、“二”、“三”。现在“一”和“二”是相互独立的,但如果某些东西需要“三”类型的采样,那么“一”和“二”的代码都需要运行。现在我正在这样做:

bool flag = false;
switch(type) {
case Three: flag = true;
case One: 
// ...
if(!flag) break;
case Two:
// ...
break;
}

在没有布尔值的情况下,是否有一种“偷偷摸摸”的方式?我可以考虑将“一”和“二”的代码放入单独的函数中,并在“三”的情况下调用两者,但我不希望在那里调用函数,因为这被称为>很多

【问题讨论】:

  • 另外,如果您能为这个问题想出一个更好的名称,请随时编辑它(我不能)
  • if (type==One || type==Three) { ... } if (type==Two || type==Three) { ... } 是可能的。
  • 为什么不只是if (type == one || type == three) { ... } if (type == two || type == three) { ... }
  • switch 语句在 case 自然地按顺序执行(或总是中断)时是好的,如果不是这样,那么就不要使用 switch 语句。恕我直言,国旗相当老套
  • 我喜欢它复杂的@NathanOliver,不,我太专注于已经实现的开关,我完全忽略了这个选项 xD

标签: c++ switch-statement


【解决方案1】:

我太专注于尝试让它作为开关工作,但正如 @NathanOliver 指出的那样简单

if(type==One || type == Three) {
// case One
}
if(type==Two || type == Three) {
// case Two
}

【讨论】:

  • 为什么不引入一些符合这些条件的简单布尔值呢?给他们起个好听的名字来描述这些条件的含义。那么它只是两个易于阅读的if 语句。
  • 是的,现在我们进入可读性,这不是问题的重点,但当然完全有可能
  • 让我印象深刻的是,可读性是问题的全部和完整点
  • 它更多地是作为一个与优化相关的问题,但这可能没有抓住重点
猜你喜欢
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 2012-09-05
  • 1970-01-01
  • 2016-12-05
  • 1970-01-01
相关资源
最近更新 更多