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

ここでは、adram_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**

次の3行は、dram_controller_maximumintに変換された値を出力します。最初は10に等しいと言ったので、これは10を出力することを覚えておいてください。3行すべてが同じことを行います。DRAM_Controllerタイプの値をintとして解釈し、出力しようとします。

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

基本的に、anは「名前」を持つsのenum集まりです。int

Cは、列挙値の整数表現をプログラマーに直接公開します。整数と列挙値は自由に混在させることができ、列挙値に対するすべての算術演算が許可されます。列挙型変数が、列挙値のいずれも表さない整数を保持することも可能です。実際、言語定義によれば、上記のコードはCLUBS、DIAMONDS、HEARTS、およびSPADESをint型の定数として定義し、それらがその型の変数に格納されている場合にのみ(サイレントに)列挙型カードスーツに変換されます

C ++には、Cから直接継承され、ほとんどの場合これらのように機能する列挙型があります。ただし、列挙はC ++の実際の型であり、コンパイル時のチェックが追加されます。

ウィキから。

于 2012-07-26T12:13:13.940 に答える
1

あなたが指摘している線、

DRAM_Controller(0);

にをキャスト0DRAM_Controller、それを無視します。

と同じ効果があります

0;

と同じように便利です。

C ++では、列挙型のサイズに収まる整数をその列挙型にキャストできます。これは、列挙値を「switch-case」するときにcaseが適切な
理由の1つです。default:

于 2012-07-26T12:11:39.167 に答える
0

DRAM_Controller指定された値で初期化されたタイプの一時的な名前のないオブジェクトを作成します。

オブジェクトはその値を使用せずに破棄されるため、最初の行は効果がありません。最後の2行は、オブジェクトを使用して関数の引数を初期化します。

于 2012-07-26T12:11:15.293 に答える