未初始化的枚举变量值

uninitialized enum variable value

本文关键字:枚举变量 变量值 枚举 初始化      更新时间:2023-10-16

我通过使用enum声明新类型DAY,然后从中声明两个变量day1和day2,然后当我在未初始化的情况下使用它们时,我应该看到0到6之间的值,因为enumlist中的值在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;
}

枚举不受约束,只能获取声明的值。

它有一个底层类型(一个至少足够大以表示所有值的数字类型),并且可以通过适当的不可靠类型转换,为该类型提供任何可表示的值。

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

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

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

要查看一些值,需要首先初始化它-

DAY day1 = SAT,day2 = SUN;

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

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

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

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