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

4

4 回答 4

4

int这是从到的演员表DRAM_Controller

它创建一个临时类型DRAM_Controller并且没有效果

于 2012-07-26T12:00:01.020 回答
1

你指出的那条线,

DRAM_Controller(0);

将 a 转换0DRAM_Controller,然后忽略它。

它具有相同的效果

0;

并且同样有用。

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

于 2012-07-26T12:11:39.167 回答
1

在这里,您将 a 分配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));

基本上, anenum只是一堆int具有“名称”的 s:

C 将枚举值的整数表示直接暴露给程序员。整数和枚举值可以自由混合,并且允许对枚举值进行所有算术运算。枚举变量甚至可以保存一个不代表任何枚举值的整数。事实上,根据语言定义,上面的代码会将 CLUBS、DIAMONDS、HEARTS 和 SPADES 定义为 int 类型的常量,只有将它们存储在该类型的变量中才会(默默地)转换为 enum cardsuit

C++ 具有直接从 C 继承的枚举类型,它们的工作方式大多类似,除了枚举是 C++ 中的真实类型,提供额外的编译时检查。

来自维基。

于 2012-07-26T12:13:13.940 回答
0

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

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

于 2012-07-26T12:11:15.293 回答