C++与C#对比学习:switch

平时碰到分支条件判断最常用的是if else语句,不过有时要是分支条件太多用switch就更直观,方便一点.先举两个简单的例子.

C++:

int num = 2;

switch(num)

{

case 1:cout<<"one";break;

case 2:cout<<"two";break;

case 3:cout<<"three";break;       //break可省略

default:cout<<"default";break;    //default 非必须,可以省略

}

 

C#:

int num = 2;

switch (num)

{

                case 1: Console.WriteLine("one"); break; 

                case 2: Console.WriteLine("two"); break;

                case 3: Console.WriteLine("three"); break; //break不能省略

                default: Console.WriteLine("default"); break; //default 可省略.

 }

C++,C#中swith的用法几乎是一模一样了.只有一些细小的差别,C#在C++的基础上做了一点改进.

区别:

1. C++中switch()括号中的变量类型只能是整形或者能默认转换成整形.比如int,long,bool,char,enum.(当然表达式也行,只要结果符合前面条件).但float,double,string就不行.另外自定义的类型,比如某个class,如果类中有运算符重载,class能默认转换成int.那也可以.不过大部分时候还少会在switch中用到自定义的类型吧

C#中switch()括号中的变量类型可以是byte,short,int,long,bool,enum另外还有string,这个在C++中是不行的.跟c++一样,可以用表达式,但float,double是不行的.自定义类型如可转换也行.

 

2. C++中break是可以省略的.但这样容易造成一个问题.如果没有break当某个分支符合条件执行完了后,会接着执行后面的分支.在上面的例子中,如果break全部去掉.结果会是twothreedefault

C#要你强制性使用break,不用的话在编译时就会报错.这样就不会犯C++中因忘记写break而出现的错误.

 

补充:其实也可以用return替换break.只不过return是表示退出整个函数,而break只是退出switch这个语句块.

 如果switch的语句块中的逻辑比较复杂还可以综合使用goto语句.

比如

int num = 2;

bool check = false;

switch (num)

{

case 1: Console.WriteLine("one"); break;

case 2: Console.WriteLine("two"); goto label;

case 3: Console.WriteLine("three"); break;

 label: default: Console.WriteLine("default"); break;

}

当然很多很多人都说过在写代码时尽量另用goto语句,不得万不得已少用了。

相关推荐