令人困惑的枚举初始化

时间:2012-07-26 11:56:55

标签: c++

此代码的含义是什么:

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

4 个答案:

答案 0 :(得分:4)

这是从intDRAM_Controller

的演员表

它创建一个DRAM_Controller类型的临时表,但没有效果

答案 1 :(得分:1)

你指出的那条线,

DRAM_Controller(0);

0投射到DRAM_Controller,然后忽略它。

具有相同的效果
0;

并且同样有用。

在C ++中,任何可以符合枚举大小的整数都可以转换为该枚举 当你在枚举值上“切换案例”时,default:案例是个好主意的原因之一。

答案 2 :(得分: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**

接下来的三行将打印转换为int的dram_controller_maximum值。请记住,在开始时我们说它等于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个名字"":

  

C直接公开枚举值的整数表示   程序员。整数和枚举值可以自由混合,全部   允许对枚举值进行算术运算。它是均匀的   枚举变量可以保存不包含的整数   表示任何枚举值。事实上,根据   语言定义,上面的代码将定义CLUBS,DIAMONDS,   HEARTS和SPADES作为int类型的常量,它们只是   如果它们存储在变量中,则转换(静默)到枚举   那种类型

  

C ++具有直接从C&和C继承的枚举类型   除了枚举是一个真正的类型之外,大多数工作都是这样的   C ++,提供额外的编译时检查。

from wiki.

答案 3 :(得分:0)

它创建一个用给定值初始化的DRAM_Controller类型的临时未命名对象。

第一行没有效果,因为对象在不使用其值的情况下被销毁。最后两行使用该对象初始化函数参数。