`

switch在C++与C#中的一些差异

 
阅读更多
参考链接
http://blog.csdn.net/weiwenhp/article/details/7951743


平时碰到分支条件判断最常用的是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是不行的.自定义类型如可转换也行.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Ch04Ex03
{
    class Program
    {
        static void Main(string[] args)
        {
         const string myName = "karli";
         const string sexyName = "angelina";
         const string sillyName = "ploppy";
         string name;

         Console.WriteLine("What is your name?");
         name = Console.ReadLine();

         switch (name.ToLower())
         {
            case myName:
               Console.WriteLine("You have the same name as me!");
               break;
            case sexyName:
               Console.WriteLine("My, what a sexy name you have!");
               break;
            case sillyName:
               Console.WriteLine("That's a very silly name.");
               break;
         }

         Console.WriteLine("Hello {0}!", name);
         Console.ReadKey();
        }
    }
}


    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#的一些比较

    预处理器指令在C++中用于条件编译,而在C#中,这些功能更多地被编译器特性所取代,如`#if`、`#endif`等。C#不使用头文件,而是使用`using`指令来引用命名空间。 异常处理方面,C#的`try`-`catch`-`finally`结构比...

    C++和C#的却别与各自的用法

    C++的struct与class主要区别在于默认访问权限,但在C#中,struct和class有本质的内存管理差异。 6. 语法差异:包括数组声明、switch语句、运算符重载、构造函数、异常处理等方面,C#都具有更为严谨和安全的规则,...

    C/C++/C#开发手册资料

    在IT行业中,C、C++和C#是三种至关重要的编程语言,它们各自拥有独特的特性和用途。这份“C/C++/C#开发手册资料”很可能是为了帮助开发者深入理解和熟练掌握这三种语言而编写的综合资源。下面,我们将详细探讨这些...

    才C#于C++的差别

    3. 布尔值:C++的bool类型可以与整数类型相互转换,但在C#中,bool类型与其他类型之间不允许直接转换,确保类型安全。 4. long类型:C#的long是64位整数,而C++中的long通常是32位。 5. 参数传递:C++默认按值传递...

    C#与java的区别

    在语言规范的比较中,可以看到一些具体差异: 1. **简单数据类型**:C#中的值类型(Value Types)对应Java的简单数据类型(Primitive)。C#提供了更多的预定义数据类型,比如无符号整数类型(unit)。 2. **常量**...

    JAVA与C#相同与区别.pdf

    标题和描述提示了文件内容涉及Java与C#两种编程语言的相同点与不同点,以及通过对比阐述它们的核心概念和技术特征。...了解这些相同与差异有助于开发者更好地掌握这两种语言,并在不同项目需求中作出合理的技术选择。

    C#完全中文手册

    - **18.2 在C#代码中调用C++和VB编写的组件** - COM互操作的技术细节。 - **18.3 版本控制** - 版本控制系统的使用方法。 - **18.4 代码优化** - 提高代码性能的最佳实践。 - **18.5 小结** - 回顾本章介绍的...

    C++、Java和C_的语法比较.doc

    根据提供的文档信息,我们可以深入探讨C++、Java与C#三种编程语言之间的语法差异。这里主要聚焦于C++与C#的对比,并适当提及Java的相关特性,以帮助读者更好地理解这些语言之间的区别。 ### 一、继承 **C++**: ...

    c# sample

    在本文中,我们将深入探讨C#的核心概念、语法特性,以及它与JavaScript的对比,帮助你更好地理解这两种语言。 首先,C# 的基础语法与C++和Java非常相似,具有严谨的类型系统,支持类、接口、继承和多态性。它的命名...

    c#实现的窗口抖动源码(可以Ctrl+V到java,C++)

    根据提供的文件信息,本文将详细解释如何在C#中实现窗口抖动效果,并探讨如何将这一功能移植到Java和C++中。 ### C#中的窗口抖动实现 #### 概述 窗口抖动是一种常见的用户界面动画效果,常用于吸引用户的注意力或...

    C#与JAVA的区别,对于要选择学C#还是JAVA的初学者,有意义

    C#(C-Sharp)是由微软开发的一种新型编程语言,被广泛认为是面向组件的编程语言之一,尤其是在C/C++语言家族中。它由微软的Anders Hejlsberg与Scott Wiltamuth共同设计。相比之下,Java是一种更为成熟的编程语言,...

    C#和 Java比较

    首先,C#和Java都支持面向对象编程,但C#在设计上更加靠近C++,提供了一些C++的特性,比如模板和指针(但C#的指针使用受到限制)。Java则没有提供C++那样的指针,而是使用引用作为对象的访问方式。在继承方面,两者...

    java与c#的比较

    C#是由微软开发的编程语言,设计初衷在于融合C++的强大功能与Java的易用性,同时利用.NET框架的优势。相比之下,Java则由Sun Microsystems创建,后被Oracle收购,是一种跨平台的通用编程语言,以其“一次编写,到处...

    C#和JAVA的比较

    尽管C#在诞生之初就被外界认为是对Java的克隆或者替代品,但实际上,C#与Java在很多方面都有显著的差异,而不仅仅是Java的翻版。对于Java开发者来说,理解这些差异对于学习C#或扩展技术视野至关重要。 首先,让我们...

    浅析C#与C++相关概念的比较

    - 引用类型与值类型:在C#中,类(class)的实例是引用类型,它们的内存分配在堆中,而C++中的类实例通常是值类型,存储在栈中。 - 结构(struct)的区别:C#中的struct是值类型,与C++中的struct类似,但C#中的...

    C#基础理论知识总结

    C#是一种面向对象的编程语言,由微软公司于2000年推出,主要用于开发Windows平台的应用程序。它被设计为提高程序员的生产效率,同时提供...了解并掌握这些知识,对于进行.NET开发或对比分析C#与Java的差异都至关重要。

    c#与java的区别.pdf

    而在C#中,属性是真正的内置特性,get和set方法必须一起定义,访问时使用点号"."。 2. **对象索引**: - C#支持对象索引,类似对象数组,可以通过int索引访问。 3. **访问修饰符的默认值**: - 当在C#中不指定...

Global site tag (gtag.js) - Google Analytics