小记C++中switch....case的误用

本文探讨了C++与C#中switch语句的差异,特别是在条件表达式支持的数据类型方面。此外,还讨论了在switch语句中定义局部变量时可能遇到的问题及解决方法。

      最近在看大话设计模式,书上的例子都是用C#写的,所以和C++还是有差别的地方,今天就遇到了switch.....case的差别。

      对于switch(条件表达式)

            {

                  case 标号1: .....

                  case 标号2: .....

                  ..........

           }

      在C++中条件表达式的值只能是整形和枚举类型(整形包括char类型),而在C#中可以是字符串类型,这样就灵活方面了。

 

       还有一个经常犯的错误就是在switch语句的作用域范围内定义新的变量或对象,而在编译时不会对该变量进行初始化导致编译错误。如果temp只定义,没有初始化的话则没有错误。

int main()
{
	int s = 0;

	switch(s)
	{
	case 1:
		int temp = 3;
		break;
	case 2:
		break;
	}

	return 0;
}


在VS中编译错误提示: error C2360: “temp”的初始化操作由“case”标签跳过。因此应该用{}将temp变量定义到作用域中,或不进行初始化

 

switch(a)
{
    case 1:
	int b;
	b = 6;
	cout<<b<<endl;
	break;

    case 2:
	a = 3;
	cout<<a<<endl;
}


 

 

       顺便再提一下枚举的使用方式:每个枚举都定义了一种新的类型。枚举类型的对象的初始化或赋值,只能通过其枚举成员或同一枚举类型的其他对象来进行。

        enum Points{ A = 2, B, C = 5, D };

	Points point1 = A;  //ok
	Points point2 = 3;  //error,int类型的值不能用于初始化Points类型的实体
	Points point3 = point1; //ok


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值