#include "stdafx.h"
#include<iostream>
#include<typeinfo>
using namespace std;
enum dayOfWeek : short { M = 10, TU, W, TH, F, SA, SU };
int main()
{
dayOfWeek d = TU;
int u = d; // HOW ???
return 0;
}
现在有人可以向我解释这是怎么发生的吗?这个隐式演员如何运作?
答案 0 :(得分:2)
那里没有明确的演员。您明确地将(C ++ 11及更高版本)作为enum
a short
的基础类型;在您的作业中可以隐式转换为int
。
但是,无论您是否具有明确的基础类型,C ++标准都明确声明未编组的枚举值可以隐式转换为整数类型。
enum class
这不是一个更好的选择。
答案 1 :(得分:1)
正如the documentation enum
中提到的那样,值可以隐式转换为整数类型
unscoped枚举类型的值可隐式转换为整数类型。如果基础类型未修复,则该值可转换为以下列表中的第一个类型,可以保留其整个值范围:
int
,unsigned int
,long
,{{1} },unsigned long
或long long
。如果基础类型是固定的,则可以将值转换为其提升的基础类型。
如果您想禁止此隐式转化,可以使用unsigned long long
enum class