最近在看大话设计模式,书上的例子都是用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