2012-07-26 117 views
0

這是什麼代碼的含義:混淆枚舉初始化

using namespace std; 


enum DRAM_Controller { dram_controller_maximum = 10}; 

void myprint(DRAM_Controller dct) 
{ 
    printf("dct value is: %d\n", dct); 
} 

int main() 
{ 

    DRAM_Controller(0); //**--> What is the meaing of this** 

    printf("value is : %d\n", dram_controller_maximum); 
    printf("value is : %d\n", DRAM_Controller(1)); 
    myprint(DRAM_Controller(0)); 
} 

的輸出是: 值是:10 值是:1個 DCT值是:0

回答

1

在這裏,您分配一個dram_controller_maximum到10,這只是意味着,每次你寫 something = dram_controller_maximum,你的意思是something = 10

enum DRAM_Controller { dram_controller_maximum = 10}; 

對於下面的功能,如果你傳遞一個數字,它只會打印它。如果你通過一個DRAM_Controller變量,它會評估它的值(記住一個數字)並打印出來。

void myprint(DRAM_Controller dct) 
{ 
    printf("dct value is: %d\n", dct); 
} 

下面的行只是變換整數(0)至DRAM_Controller。這條線本身是沒用的:

DRAM_Controller(0); //**--> What is the meaing of this** 

接下來的三行將打印dram_controller_maximum值轉換爲int。請記住,在我們說這是等於10開始,因此這將只打印10.所有的三條線做同樣的事情:他們試圖解釋DRAM_Controller型值作爲int和打印:

printf("value is : %d\n", dram_controller_maximum); 
printf("value is : %d\n", DRAM_Controller(1)); 
myprint(DRAM_Controller(0)); 

基本上,enum只是int秒的一束具有「名稱」:

ç暴露枚舉值的整數表示直接 程序員。整數和枚舉值可以自由混合,並且所有枚舉值的算術運算都是允許的。它甚至 可能枚舉變量來保存不 的整數表示任何枚舉值的。實際上,根據 的語言定義,上面的代碼將定義CLUBS,DIAMONDS, HEARTS和SPADES作爲int類型的常量,如果將它們存儲在變量 中,那麼只會將 轉換(靜默)爲enum cardsuit這種類型的

C++有直接從C'S和 工作大多喜歡這些繼承,但枚舉是 C++真正的類型枚舉類型,提供額外的編譯時間檢查。

from wiki.

+0

謝謝你這麼多的解釋。我知道鑄造的東西是:(unsigned int *)0xAABBCCDD;但沒有遇到這樣的事情。是什麼特定於C++ – user1554526 2012-07-27 04:39:25

+0

好吧,找到答案:http://stackoverflow.com/questions/32168/c-cast-syntax-styles – user1554526 2012-07-27 04:45:23

4

這是從int鑄到DRAM_Controller

它會創建一個臨時DRAM_Controller類型,並沒有影響

0

它會創建一個臨時的,未命名的DRAM_Controller對象,並使用給定的值進行初始化。

第一行不起作用,因爲該對象在不使用其值的情況下被銷燬。最後兩行使用該對象來初始化函數參數。

1

你指出的線,

DRAM_Controller(0); 

蒙上了0DRAM_Controller,則忽略它。

它作爲

0; 

相同的效果,也同樣有用。

在C++中,任何可以放入枚舉大小的整數都可以轉換爲該枚舉。
這是在您對枚舉值「切換大小寫」時0​​案例是個好主意的原因之一。