碰到了一个问题,定义一个性别的枚举类型,可以通过键盘输入性别,且可输出,如下:
#include
using namespace std;
int main()
{
enum TSex {man,woman};
TSex sex;
cout<<"输入0或1:0代表man,1代表woman"<<endl;
cin>>(int &)sex; //不明白这是怎样将整型值转化为枚举元素值的?
switch(sex)
{
case man:cout<<"man"<<endl;break;
case woman:cout<<"woman"<<endl;break;
default:cout<<"性别输入错误"<<endl;break;
}
return 0;
}
符号(int &)是如何实现整型想枚举元素值转化的呢?
建议先按 int 型的输入,也按 int 型的进行判断。如果有必要,将 int 赋值给枚举变量用于后继的处理。
接收一个输入,然后转为int
声明如上的枚举类型变量(TSex sex)时,其实就相当分配了一个(长)整型数据,而(int &)表示取址,cin>>(int&)sex,就是把输入的数据保存到这个地址里面
C++中,枚举其实就是对整数值人为标记的一种形式而已,编译器会自动将man woman转换为0 1,本质上,你的程序等价:
switch(sex) { case 0: ... case 1: ... }; 而C++会自动对枚举编号,如果你不指定特定的值,enum TSex {man,woman};其实就是enum TSex {man = 0,woman = 1};的简写。看这个:enum TSex {man = 1, woman, neithermannorwoman };,那么woman自动会被视作2,而neithermannorwoman就是3