Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 以下声明之间有什么区别?_C++ - Fatal编程技术网

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);
    }
}