C++ 以下声明之间有什么区别?
我有数字类型、颜色:C++ 以下声明之间有什么区别?,c++,C++,我有数字类型、颜色: enum colors {green, red, blue}; 是否colors mycolors=red与int yourcolors=red相同,并且每个枚举数的类型是int?两者的值都是1,对吗 谢谢 我只想发布一段代码片段来证明Jason Lang和Kerrek SB的评论: #include <iostream> #include <typeinfo> enum colors {green, red, blue}; int main(
enum colors {green, red, blue};
是否colors mycolors=red
与int yourcolors=red
相同,并且每个枚举数的类型是int
?两者的值都是1,对吗
谢谢 我只想发布一段代码片段来证明Jason Lang和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;
}
另外(正如Daniel Kamil Kozar提到的)还有enum类
(只有C++11和更高版本!)。有关为什么选择enum类
而不是enum
的更多信息,请参阅
关于“为什么enum
s不只是int
s(或long
s或…)之后是enum
s”的问题,请考虑运算符重载。也就是说,++颜色(绿色)==1
不能为真。
确认普通enum
s可以重载运算符,并查看如何避免强制转换“enum类”的重载运算符
最后请记住,
enum
s的使用(如果使用合理的话)可以提高代码的可读性。我只想发布一个小代码片段来证明Jason Lang和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;
}
另外(正如Daniel Kamil Kozar提到的)还有enum类
(只有C++11和更高版本!)。有关为什么选择enum类
而不是enum
的更多信息,请参阅
关于“为什么enum
s不只是int
s(或long
s或…)之后是enum
s”的问题,请考虑运算符重载。也就是说,++颜色(绿色)==1
不能为真。
确认普通enum
s可以重载运算符,并查看如何避免强制转换“enum类”的重载运算符
最后请记住,如果使用合理,使用enum
s可以提高代码的可读性。- 我认为
似乎更安全一些。您可以执行enum
,但不能执行intyourcolors=red
colors mycolors=1
- 调试枚举时,使用枚举很有帮助。它显示枚举名称 而不是它的价值
- 枚举值不是左值。所以,当你从他们身边经过的时候 参考,不使用静态内存。就好像你 将计算值作为文本传递
- 我认为
似乎更安全一些。您可以执行enum
,但不能执行intyourcolors=red
colors mycolors=1
- 调试枚举时,使用枚举很有帮助。它显示枚举名称 而不是它的价值
- 枚举值不是左值。所以,当你从他们身边经过的时候 参考,不使用静态内存。就好像你 将计算值作为文本传递
枚举被实现为数字(可能是int,但可能更小),但是将它们保持在接近零的窄范围内可以允许编译器进行更多优化(例如,如果有帮助,编译器可能决定将它们填充到字符中)。实际上,这些值在内部是相同的,但最好尽可能使用枚举,因为它们会抽象出底层的数字类型。还要注意,其他相关语言比C++更严格。你可以在C++中交换int和eNUM,但不可以在C++中进行(即使它将被存储为一个数字)。只要使用C++ + EnUM类< /C> >如果你用C++编码。code>和
双色mycolors=red
,也是1。@DanielKamilKozar,为什么?谢谢杰森的解释!枚举被实现为数字(可能是int,但可能更小),但是将它们保持在接近零的窄范围内可以允许编译器进行更多优化(例如,如果有帮助,编译器可能决定将它们填充到字符中)。实际上,这些值在内部是相同的,但最好尽可能使用枚举,因为它们会抽象出底层的数字类型。还要注意,其他相关语言比C++更严格。你可以在C++中交换int和eNUM,但不可以在C++中进行(即使它将被存储为一个数字)。只要使用C++ + EnUM类< /C> >如果你用C++编码。code>和双色mycolors=red
,也是1。@DanielKamilKozar,为什么?谢谢杰森的解释!好的,谢谢!但是,如果“mycolors==yourcolors”为真,这是否意味着mycolors的值是int(1)如果为真,变量不能是int类型而不是colors?两个变量具有相同值的事实似乎意味着两个变量具有相同的类型,但它们不是。试想一下0.0==0.0f
,但是double
与float
不同。(可能不是最好的例子,但我现在找不到更好的。)@Game-Ideas:II完全忘记了操作符重载。我加了一段,谢谢!但是,如果“mycolors==yourcolors”为真,这是否意味着mycolors的值是int(1)如果为真,变量不能是int类型而不是colors?两个变量具有相同值的事实似乎意味着两个变量具有相同的类型,但它们不是。试想一下0.0==0.0f
,但是double
与float
不同。(可能不是最好的例子,但我现在找不到更好的。)@Game-Ideas:II完全忘记了操作符重载。我加了一段,谢谢。因此,有了这些优点,当涉及到是否应该使用enum或int时,更重要的是易读性和使代码更高效?还是我错了?我加了一个例子。我更喜欢看标签,而不是照片
enum KEYS
{
UP,
RIGHT,
DOWN,
LEFT
};
void (KEYS select)
{
switch (select)
{
case UP:
case RIGHT:
case DOWN:
case LEFT: break;
default: exit(1);
}
}