6

I declare new type DAY by using enum and then declare two variable from it day1 and day2, then I was supposed to see values between 0 to 6 when I used them uninitialized since the values were between 0 to 6 in enumlist , but I receive these values instead -858993460.

can you explain me why I receive these values instead of 0 to 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;
}
4

6 回答 6

14

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

它有一个基础类型(一个至少大到足以表示所有值的数字类型),并且可以通过适当的狡猾的转换获得该类型可表示的任何值。

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

于 2013-07-17T12:38:39.473 回答
8

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

于 2013-07-17T12:38:36.503 回答
1

像任何变量一样,如果它未初始化,则值未定义。不能保证 enum 变量保持有效值。

于 2013-07-17T12:39:15.723 回答
0

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

DAY day1 = SAT,day2 = SUN;
于 2013-07-17T12:38:59.740 回答
0

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

于 2013-07-17T12:39:34.977 回答
0

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

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

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

于 2013-07-17T12:42:07.597 回答