私は種類、色をtheenumeratedています次の宣言の違いは?
enum colors {green, red, blue};
はcolors mycolors=red
int yourcolors=red
と同じであり、各列挙子int
のタイプですか?両方とも1の値を持つでしょう、そうですか?
ありがとうございます!
私は種類、色をtheenumeratedています次の宣言の違いは?
enum colors {green, red, blue};
はcolors mycolors=red
int yourcolors=red
と同じであり、各列挙子int
のタイプですか?両方とも1の値を持つでしょう、そうですか?
ありがとうございます!
は、私はちょうどジェイソン・ラングとKerrek SBのコメントを証明するために少しのコードスニペットを投稿したい:
#include <iostream>
#include <typeinfo>
enum colors {green, red, blue};
int main()
{
colors mycolors=red;
int yourcolors=red;
if (mycolors == yourcolors)
std::cout << "same values" << std::endl;
if (typeid(mycolors) != typeid(yourcolors))
std::cout << "not the same types" << std::endl;
return 0;
}
次のコンソール出力につながるこのコードを実行:また
same values
not the same types
(Daniel Kamil Kozarが述べたように)enum class
(C++ 11以降のみ!)があります。詳細についてはthis Questionを参照してください。をenum
よりも優先させる理由については、
疑問「なぜだけでなくint
S(またはlong
秒または...)の後enum
sがちょうど演算子のオーバーロードを考えているについて。つまり、++ colors(green) == 1
は真であってはなりません。 this Questionオペレータのオーバーロードが平文enum
およびthis question and the accepted answerの場合、 'enumクラス'の演算子のオーバーロードを回避する方法を確認してください。
最後に、enum
の使用は合理的であれば、コードの可読性が向上することに注意してください。
まあ、ありがとう!しかし、 "mycolors == yourcolors"がtrueの場合、mycolorsの値はint(1)であり、これが真の場合、変数ではなくint型であることができます。 –
これは、両方の変数が同じ値を持つことは、両方の変数が同じ型であることを意味するかもしれませんが、そうではありません。 '0.0 == 0.0f'と考えると、' double'は 'float'と同じではありません。 (おそらく最良の例ではないが、私は今より良いものを見つけることができないだろう) – Shadow
@Game Ideas:IIはオペレータの過負荷を完全に忘れてしまった。私はそれについての段落を追加しました。 – Shadow
enum
はもう少し型安全です。 int yourcolors=red
はできますが、colors mycolors=1
はできません。enum KEYS
{
UP,
RIGHT,
DOWN,
LEFT
};
void (KEYS select)
{
switch (select)
{
case UP:
case RIGHT:
case DOWN:
case LEFT: break;
default: exit(1);
}
}
まあありがとう。したがって、これらの利点の状態では、enumまたはintのどちらを使用すべきかについては、読みやすく、コードをより効率的にすることが重要です。または私は間違っていますか? –
私は例を追加しました。私はその読みやすさのために数字の代わりにラベルを見たいと思う。 – snr
列挙型は、例えば、コンパイラのかもしれない(ただし、ゼロに近い狭い範囲でそれらを維持することは、コンパイラに、より最適化される可能性があり、(おそらくint型になりますが、小さいこともある)数字として実装されていますそれが助けてくれれば、彼らはチャーに詰め込むことができると決めました)。値は実際には内部的に同じですが、可能な限り列挙型を使用するほうが、基になる数値型を抽象化する方がよいでしょう。また、C++よりも他の関連言語が厳しいことに注意してください。 intとenumはC++では交換できますが、C#では(たとえ数値として格納されていても)交換することはできません。 –
C++ 11でコーディングする場合は、単に 'enum class'を使用してください。 –
'mycolors'の型は' colors'です。 'yourcolors'の型は' int'です。 –