2013-04-23 57 views
2

我在一些庫中發現了表達式枚舉類型名稱積分值),但它對我來說看起來有點奇怪,它真的是什麼樣子(至少對我來說)?枚舉類型可以被稱爲函數,或者它只是另一種鑄造枚舉類型?或者是什麼? 例如:C++枚舉類型可以作爲函數調用,還是隻是一種不同的類型轉換?

enum SomeEnum 
{ 
SOMETHING = 0, 
OTHERTHING = 1 
}; 

void someFunction(SomeEnum e) 
{ 
// ... 
} 

someFunction(2); // Invalid conversion 
someFunction((SomeEnum)2); // Works, Normal casting 
someFunction(SomeEnum(2)); // Works!! calling the enum as a function?? or just another style of enum casting?? 

回答

0

那麼就像其他對象,你可以創建使用構造臨時對象。在這種情況下你傳遞一個臨時SomeEnum物體的2

+0

非常感謝,你的回答真的很有幫助,特別是「臨時對象」的事情,實際上它觸發我搜索枚舉默認構造函數,並且我發現這個[link](http://lifecs.likai.org/2010 /07/c-enum-default-constructor.html)。 – babdrabbo 2013-04-23 23:08:35

+0

很高興我能幫忙! C++有一些很酷的功能,旨在讓我們的生活更輕鬆。 – 2013-04-23 23:10:51

0
someFunction((SomeEnum)2); // Works, Normal casting 
someFunction(SomeEnum(2)); // Works!! calling the enum as a function?? or just another style of enum casting?? 

實際上的價值,這僅僅是鑄造另一種語法。就像:

(int)2 
int(2) 
5

這只是另一種鑄造方式。 (type)valuetype(value)通常是等效的。唯一的例外是當涉及類型的名稱由兩個或更多個標記組成時,例如char *unsigned long(因此允許(unsigned long)x,但unsigned long(x)不允許)。

即使在這樣的情況下,可以爲類型創建一個單一的令牌名稱,同樣使用它:

typedef unsigned long ulong; 
a = ulong(x); 

在任何情況下,你得到的是語義C風格的轉換。大多數C++程序員通常都會避免這些情況,因爲它們的含義可能有點模棱兩可。根據使用情況,它可能相當於static_castreinterpret_castconst_cast,它們的組合或您根本無法用新風格演員陣容演員陣容。

0

這只是鑄造..也許你應該使用C++風格鑄造雖然

someFunction(static_cast<SomeEnum>(2)) 
0

枚舉是在C型++。所以SomeEnum(2)只是一個類型轉換。 C++(11)帶來了enum類,這是一個更好的類型表示,符合OOPS術語。

相關問題