2017-10-20 131 views
0
#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; 
} 

現在有誰可以向我解釋這是怎麼發生的?這種隱式投射是如何工作的?隱式從枚舉類型轉換爲int可能如何?

+5

它的工作原理。它最有可能從C繼承下來。但是,那些日子已經結束了,而且更強大的枚舉。 'enum class' – WhiZTiM

+0

有沒有這樣的事情作爲隱式演員。一投的是你在你的源代碼來告訴編譯器進行轉換寫的東西。這個問題是關於一個隱含的**轉換**。 –

回答

2

那裏沒有明確的表演。你明確提出了(C++ 11及以上版本)enum a short的基礎類型;在您的任務中可以隱式轉換爲int

但是,你是否有一個明確的基礎類型,還是不行,C++標準明確規定,無範圍的枚舉值是隱式轉換爲整數類型。

這不是它是一種更好的選擇與enum class的情況。

1

如上所述在the documentationenum的值是隱式轉換爲整數類型無作用域枚舉類型的

值是隱式轉換爲整數類型。如果基礎類型不固定,則該值可轉換爲以下列表中的第一個類型,該列表可以保留其整個值範圍:int,unsigned int,long,unsigned long,long longunsigned long long。如果基礎類型是固定的,則可以將這些值轉換爲其提升的基礎類型。

如果你希望禁止這種隱式轉換,因爲語言是這麼說的,你可以使用一個enum class

enum class dayOfWeek : short { M = 10, TU, W, TH, F, SA, SU }; 

int main() 
{ 
    dayOfWeek d = dayOfWeek::TU; 
    int u = static_cast<int>(d); 
    return 0; 
} 
相關問題