0

重複の可能性:
#define、enum、または const を使用する必要がありますか?
#defines と定数の長所と短所は?

#define や const よりも enum の方が便利です。メモリとコードの可視性の観点と可読性の観点。整数内のすべての値を取得した場合、列挙型を int の配列に変換 (型キャスト) できますか。

例:

    class MapPlt_clContainer { 
    public:  
    enum tagVectorType {       
    enVTAll = 0,       
    enVTPolygon,       
    enVTLines 
    }  
    };  

    tVoid MapPlt_clRender::vDrawLineClass( MapPlt_clContainer::tagVectorType* ) 

関数列挙パスの呼び出し中

vDrawLineClass( ClassArray_Group ); //Working

配列ベース アドレス パスの呼び出し中

int test[3] =  
{       
5,       
6,       
7, 
};   

vDrawLineClass( test); //Not Working

エラー!!

自動的に型キャストする必要がありますか?またはコンパイラに依存します。私の場合、エラーが発生しています。

4

3 に答える 3

4

enumは別の#defineであり、言語 (コンパイラの助けを借りて) は、異なる型の値が混在していないことを確認するのに役立ちます(それらが同じ数値であっても)。

さらに、enumデバッガーは an の値を使用できますが#define、前処理時間中 (コード生成が開始される前) は元の意味が失われます。

enumanから an への型キャストintは自動組み込みプロセスintですが、特定の に対してすべての値が有効であるとは限らないため、反対の変換はよりトリッキーですenum

最新のコンパイラは、節を持たないステートメントで可能なすべてののenum値を使用した場合にも警告を発します。switchdefault#define

于 2012-07-25T11:30:19.393 に答える
1

C ++で列挙型を整数として使用している場合、臭いがあります。列挙型は型を定義し、その型の値のみを使用する必要があります。(これは強制されておらず、列挙型は int として解釈できることを認識していますが、C++ では一般的にそうすべきではありません)。

また、私の大きな不満: C++ の列挙型の名前に「Type」を入れないでください。列挙型の値は「型」ではありません (C++ の意味で)。テンプレート コードの作成を開始するとすぐに、型名に Type という単語が含まれるすべての列挙型が嫌いになります。

また、デザインでタイプキャストしようとするときはいつでも、それは間違っています。それは C++ ではひどい臭いです。それを行う必要はありませんし、コードに設計するべきではありません (つまり、「機能」として使用します)。

最後に、この部分:

int test[3] =  
{       
5,       
6,       
7, 
}; 

vDrawLineClass( test); //Not Working

これは真っ直ぐな醜いハックです。あなたが言うことをしてください、あなたがすることを言ってください:

MapPlt_clContainer::tagVectorType test[3] =  
{       
MapPlt_clContainer::enVTAll,       
MapPlt_clContainer::enVTPolygon,       
MapPlt_clContainer::enVTLines 
};

vDrawLineClass( test);
于 2012-07-25T12:40:39.743 に答える
1

他の回答で行われたポイントに加えて、次のことを追加したいと思います。

複数の型があり、それらを反復する必要がある場合は、次のような定数の配列を使用する必要があります。

const int states[] = {STATE_1,STATE_2, STATE_3, STATE_4 };
int numStates = sizeof(states)/sizeof(state[0]);
for (int i = 0; i < numStates; i++) {
    // Do something with states[i]..
}

列挙を使用すると、これは次のように簡略化できます。

enum states{cState_1 = 0, cState_2, cState_3, cState_4, cNumStates};
for (int i = 0; i < numStates; i++) {
    // do something with i
}
于 2012-07-25T12:50:49.147 に答える