我通过使用枚举声明新类型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;
}
答案 0 :(得分:11)
枚举不限于仅采用声明的值。
它有一个底层类型(一个至少足以代表所有值的数字类型),并且可以通过适当的狡猾的转换,给出该类型可表示的任何值。
此外,使用未初始化的变量会给出未定义的行为,因此原则上任何事情都可能发生。
答案 1 :(得分:6)
因为这些变量是未初始化的;他们的价值是不确定。因此,您会看到未定义行为的结果。
答案 2 :(得分:1)
与任何变量一样,如果未初始化,则值未定义。枚举变量不保证保持有效值。
答案 3 :(得分:0)
要查看某些值,首先需要对其进行初始化 -
DAY day1 = SAT,day2 = SUN;
答案 4 :(得分:0)
您声明,但不要初始化day1
和day2
。作为没有默认构造的POD类型,变量处于未定义状态。
答案 5 :(得分:0)
我们可以通过以下代码讨论:
#include <iostream>
using namespace std;
int main()
{
int i1, i2;
cout << i1 << endl << i2 << endl;
}
POD类型的未初始化的局部变量可能具有无效值。