【发布时间】:2015-02-05 09:40:04
【问题描述】:
我觉得 C++ 应该允许 switch() 超过任何可以比较的类型,而不仅仅是整数类型。这似乎很奇怪:
switch(myEnum)
{
case myEnumValue1:
... break;
case myEnumValue1:
... break;
}
在语义上与:
if(myEnum == myEnumValue1)
...
else if(myEnum == myEnumValue2)
...
但这仅适用于整数类型。为什么?这种限制的目的是什么?
我了解switch 的编译器生成的代码可能仅与整数或寄存器大小的类型兼容,但这些类型的东西通常是开发人员决定的黑盒。这些东西通常是从我们身上抽象出来的。如果跳转表更好,编译器应该生成一个。如果需要一个典型的if/else 算法,那就这样吧。
【问题讨论】:
-
那个问题是关于特定代码的,答案相当于“因为 switch 只适用于整数类型”,或者我的最后一段。我正在寻找理由。
-
在 C 中这是不可能的,但在 C++ 中你有运算符重载,所以我认为这是一个很好的理由将
switch case功能添加到 C++ 的任何对象类型,只要它的==或 @ 987654331@运算符已定义。
标签: c++ syntax switch-statement