2013-07-17 186 views
4

我使用枚舉聲明新類型DAY,然後從它day1和day2聲明兩個變量,然後我應該看到0到6之間的值,當我使用它們未初始化時,因爲值介於0到6之間在enumlist中,但我收到這些值,而不是-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

+1「合適的躲閃」 –

5

因爲這些變量是未初始化的;它們的值是不確定。因此,您會看到未定義的行爲的結果。

0

要見你需要首先初始化一些值 -

DAY day1 = SAT,day2 = SUN; 
1

像任何變量,如果它未初始化的值是不確定的。枚舉變量不保證有效值。

0

您聲明,但不初始化day1day2。作爲沒有默認構造的POD類型,變量處於未定義狀態。

0

我們可以通過下面的代碼討論:

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

未初始化的POD類型的局部變量可能有無效值。

+0

您的代碼實際上展示了未定義的行爲。 –