【发布时间】:2011-11-20 14:33:16
【问题描述】:
C# 似乎可以,但我需要 C++,最好是跨平台。
基本上,我有一个开关,可以根据单一标准对内容进行排序,并在其他所有内容上回退到默认处理。
说:
switch(color)
{
case GREEN:
case RED:
case BLUE:
Paint();
break;
case YELLOW:
if(AlsoHasCriteriaX)
Paint();
else
goto default;
break;
default:
Print("Ugly color, no paint.")
break;
}
【问题讨论】:
-
你试过了吗?我觉得有可能……
-
为什么不使用标准编程实践并让
else和default调用一个函数(内联或其他),因为它们旨在执行相同的操作。 -
@MerlynMorgan-Graham 你不能使用 goto 默认值; default 是关键字,不能用作标签。 C# 这样做的事实很糟糕 :-) 呵呵 ...
-
实际上,将默认值设置为另一个标签,如果不匹配则默认为默认值。这就是大会所做的。如果该值不在跳转表中,它将跳转到默认位置。所以我不会说允许一个人跳到 default: 是有问题的。棘手的部分是某些语言将 switch 视为带有布尔值的 if/else-if。
-
搁浅 1) 我在谈论 C 的解析阶段; C 关键字不允许用作标签; 2)您假设生成的程序集将使用标签/跳转...如果目标 CPU 使用一些完全不同的分支机制怎么办?
标签: c++ switch-statement goto