2012-07-26 161 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​​案例是个好主意的原因之一。