为什么我不能在int类型的switch语句中使用条件作为case?

whlutmcx  于 5个月前  发布在  其他
关注(0)|答案(5)|浏览(77)

我有这个密码

int a = 0;
int b = 2;
switch (a)
{ 
    case a <= b: //<--error 
        //Do something
        break;
    default:
        break;
}

字符串
我知道这可以用if/else语句来完成,但我很好奇,为什么它在switch/case语句中不起作用?
这可以用“C”编程吗?

des4xlb0

des4xlb01#

你不能给予表达式在开关的情况下,你必须给予constant值,而不是表达式的情况下。
switch语句是一个控制语句,它通过将控制传递给其主体中的一个case语句来处理多个选择和枚举
您可以阅读更多关于交换机here的信息。

bwntbbo3

bwntbbo32#

a <= B是bool表达式,但aint
同样根据http://msdn.microsoft.com/en-us/library/06tc147t(v=vs.90).aspx,每个case标签指定一个常量值。在你的例子中是表达式,而不是常量。

szqfcxe2

szqfcxe23#

有几个原因使该语言被设计为需要恒定的大小写值,包括:
(1)确保不会有重叠的范围(并且这可以在编译时检查)。(2)使switch语句具有极高的性能。(3)让C++程序员更熟悉(在早期,他们是C#新用户的很大一部分)。

dced5bon

dced5bon4#

因为在某些情况下,你应该指定a的可能值,而不是条件。

az31mfrm

az31mfrm5#

如果你这样做,第一个案子将被执行

This exact code wont work
switch(True) {
    case a<= b:
        //Do something
        break;
}

字符串
所以expression(True,在这种情况下)的结果与switch(True)的结果进行比较,比较结果看起来像这样:“Is True == True”;这显然会导致true,代码将运行。

相关问题