当前位置: 代码迷 >> C++ >> C++ 关于 switch() 括号中表达式类型的简单有关问题
  详细解决方案

C++ 关于 switch() 括号中表达式类型的简单有关问题

热度:9931   发布时间:2013-02-26 00:00:00.0
C++ 关于 switch() 括号中表达式类型的简单问题。
switch() 括号中的表达式 到底是任何类型还是整数,字符,枚举类型?
为什么我用bool类型也可以通过?

        bool a;
cin>>a;
switch(a)
{
case 0: cout<<"假"<<endl; break;
case 1: cout<<"真"<<endl; break;
default:cout<<"同真,可省略此句"<<endl;
        }

谭浩强的书中写的是“允许为任何类型”
c++ primer plus中写的是 ”最常见的标签是int或char常量,也可以是枚举型“。

这里到底是怎么样的,希望可以详细的说下各种情况,谢谢

------解决方案--------------------------------------------------------
bool型实质上也是int型,所以也是可以的。

------解决方案--------------------------------------------------------
false,为0
true,为非1。但非0也判断为true

所以,你的switch(a)是可以的

楼上说的不全对。true和false是八位的,int却是32位。
TRUE和FALSE才是32位
------解决方案--------------------------------------------------------
bool型属于可列举的,所以按照语义应该可以
------解决方案--------------------------------------------------------
所有能转为int的类型都可以
char可以看做unsigned int
bool就是0或者1
枚举类型的定义就有一种像:
enum test
{
    test1 = 0,
    test2 = 1
}
其实switch还可以传入一个类,但是必须给类定义到int的转换operator int()
------解决方案--------------------------------------------------------
引用:
这意思 只要是整数的就行是吧
试了下数组也行,浮点就不行
还有其他的类型吗?

枚举类型被引用时会被解释成整型的。
举个例子?比如Win程序设计中,处理消息时,WM_*的实质均是用#define定义的整数。
总的来说,因提供给case的判断量必须为常量表达式,故提供给switch的选择量应具有被转换成常量表达式的性质。
  相关解决方案