継承 - c++ enum 配列




Enum変数のデフォルト値? (2)

プログラムに未定義の動作があります。 エナミの価値は不確定です。 概念的には、コードと次のコードには違いはありません。

int main() {
   int i;          //indeterminate value
   std::cout << i; //undefined behavior
};

名前空間のスコープで変数を定義した場合、値は0に初期化されます。

enum SomeEnum {  
    EValue1 = 1,  
    EValue2 = 4,  
};
SomeEnum e; // e is 0
int i;      // i is 0

int main()
{
    cout << e << " " << i; //prints 0 0 
}

eSomeEnumの列挙値のいずれとも異なる値を持つことに驚かないでください。 各列挙型には、基本的な整数型( intshort 、またはlong )があり、その列挙型のオブジェクトの可能な値のセットは、基礎となる整数型が持つ値のセットです。 列挙型は、値の一部を便利に指定して新しい型を作成する単なる方法ですが、列挙子の値のセットで列挙型の値を制限することはありません。

更新:いくつか私を裏づける引用:

型Tのオブジェクトをゼロ初期化するとは、次のことを意味します。
- Tがスカラー型(3.9)の場合、オブジェクトはTに変換された0(ゼロ)の値に設定されます。

列挙型はスカラー型であることに注意してください。

T型のオブジェクトの値を初期化するとは、次のことを意味します。
- Tがクラス型の場合
- Tが非ユニオンクラスの型の場合
- Tが配列型の場合、blah blah - そうでない場合、オブジェクトはゼロで初期化されます

だから、私たちは別の部分に入ります。 また、名前空間スコープオブジェクトは値で初期化されます

質問は簡単です:

#include <iostream>

enum SomeEnum {  
    EValue1 = 1,  
    EValue2 = 4
};

int main() {
    SomeEnum enummy;
    std::cout << (int)enummy;
}

出力は何でしょうか?

注:これはインタビューではありません 。これは以前の開発者から私が継承したコードです。 ここでのストリーミング演算子は単なる例であり、実際の継承されたコードにはそれがありません。


出力は不確定です。 enummyメンバ変数は1または4のみです。







default-value