如何从枚举类型到int的隐式转换?

时间:2017-10-20 12:45:38

标签: c++ enums

#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;
}

现在有人可以向我解释这是怎么发生的吗?这个隐式演员如何运作?

2 个答案:

答案 0 :(得分:2)

那里没有明确的演员。您明确地将(C ++ 11及更高版本)作为enum a short的基础类型;在您的作业中可以隐式转换为int

但是,无论您是否具有明确的基础类型,C ++标准都明确声明未编组的枚举值可以隐式转换为整数类型。

enum class这不是一个更好的选择。

答案 1 :(得分:1)

正如the documentation enum中提到的那样,值可以隐式转换为整数类型

  

unscoped枚举类型的值可隐式转换为整数类型。如果基础类型未修复,则该值可转换为以下列表中的第一个类型,可以保留其整个值范围:intunsigned intlong,{{1} },unsigned longlong long。如果基础类型是固定的,则可以将值转换为其提升的基础类型。

如果您想禁止此隐式转化,可以使用unsigned long long

enum class