未初始化的枚举变量值

时间:2013-07-17 12:36:33

标签: c++ enums

我通过使用枚举声明新类型DAY然后从day1和day2声明两个变量,然后当我使用它们未初始化时我应该看到0到6之间的值,因为枚举列表中的值介于0到6之间,但是我收到这些值而不是-858993460。

你能解释一下为什么我会收到这些值而不是0到6吗?

    #include<iostream>

    using namespace std;
    int main()
    {
        enum DAY{SAT,SUN,MON,TUE,WED,THU,FRI};
        DAY day1,day2;

        cout<<int(day1)<<endl<<day1<<endl;
        cout<<int(day2)<<endl<<day2<<endl;

        system("pause");
        return 0;
    }

6 个答案:

答案 0 :(得分:11)

枚举不限于仅采用声明的值。

它有一个底层类型(一个至少足以代表所有值的数字类型),并且可以通过适当的狡猾的转换,给出该类型可表示的任何值。

此外,使用未初始化的变量会给出未定义的行为,因此原则上任何事情都可能发生。

答案 1 :(得分:6)

因为这些变量是未初始化的;他们的价值是不确定。因此,您会看到未定义行为的结果。

答案 2 :(得分:1)

与任何变量一样,如果未初始化,则值未定义。枚举变量不保证保持有效值。

答案 3 :(得分:0)

要查看某些值,首先需要对其进行初始化 -

DAY day1 = SAT,day2 = SUN;

答案 4 :(得分:0)

您声明,但不要初始化day1day2。作为没有默认构造的POD类型,变量处于未定义状态。

答案 5 :(得分:0)

我们可以通过以下代码讨论:

#include <iostream>
using namespace std;
int main()
{
  int i1, i2;
  cout << i1 << endl << i2 << endl;
}

POD类型的未初始化的局部变量可能具有无效值。