C++与C#对比学习:switch
来源:互联网 发布:云南边境贩毒知乎 编辑:程序博客网 时间:2024/06/14 10:47
平时碰到分支条件判断最常用的是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语句,不得万不得已少用了.
- C++与C#对比学习:switch
- C++/CLI与C#常用语法对比
- C++与C#对比学习:多重继承
- C++与C#对比学习:内存管理
- C++与C#对比学习:模板,泛型
- C++与C#对比学习:类初始化
- C#语言学习:变量的声明与初始化的范围(对比C++)
- shell脚本与c语言对比学习
- Objective-c 与java 的对比学习
- Golang与C对比学习 (1)
- Java/C/C#对比
- C#枚举与switch用法
- C++/CLI与C#常用语法对比(转)
- Objective-C语法快速参考 [与C#对比]
- c#与vb对比
- C/C++/C# 中的switch case 比较
- C语言之switch学习
- C++与C#对比学习:类型系统(一)
- Dll 模块间(dll, exe)使用导出变量、静态变量和外部变量的试验与结论
- ironpython获取进程的磁盘io--通过调用c#的非托管代码
- 《实例化需求》采访与书评(选自InfoQ)
- Can't connect to local MySQL server through socket 问题解决
- myeclipse安装svn插件
- C++与C#对比学习:switch
- Andriod中绘(画)图----Canvas的使用详解 .
- 在 ubuntu 平台上 编译 gstreamer 0.10
- Android中SQLiteDatabase操作【附源码】
- Java 解惑(Java Puzzler)
- Core Animation教学:如何使用CALayer的遮罩(mask)
- EPD中已自带Mingw,如何安装c++ boost库?
- linux内存映像
- linux 设备模型