2
enum MyEnum
{
    A,
    B,
}

MyEnum Foo(int i)
{
    MyEnum mx;
    switch(i)
    {
    case 1:
        {
            mx = A;
        }break;
    case 2:
        {
            mx = B;
        }break;
    default:
        {
            throw std::exception("ERROR");
        }
    }
}

int Main()
{
    MyEnum myEnum = Foo(1);
    return 0;
}

Foo()に「return」がない場合、このコードはVS2010でコンパイルおよび実行できます。コンパイラのバグですか?

実行できることを確認するためのVS2010スクリーンショット

4

1 に答える 1

8

コンパイラのバグではありません。戻り値が欠落している場合、コンパイラーからの診断は必要ありません(ただし、コンパイラーが診断を発行する場合があります)。これにより、未定義の動作が発生します。何かが発生する可能性があります。

于 2012-10-22T14:39:34.597 に答える