2

たとえば、VS2010 で厳密に型指定された列挙型を使用すると、次のようになります。

enum eTest : long long
{
_test1                  = 0x0000000000000001,
_test2                  = 0x0000000000000002,
};

次の警告が表示されます。

http://msdn.microsoft.com/en-us/library/ms173702.aspx

非標準の拡張機能が使用されています: 列挙型 'enum' の基になる型を指定しています

どうしてこれなの?VS2010 は C++11 をサポートしていると思いましたか? また、64-32 ビット VS2010 コンパイラ間で 64 ビット ベースの列挙型は安全ですか?

編集:

私の質問の 2 番目の部分について: 32 ビットをターゲットにしているときに 64 ビット列挙型のビット フラグを OR するとコンパイラ エラーが発生したため、32 ビットと 64 ビットの違いについて尋ねました。ただし、その理由は、Microsoft のコード分析を有効にすると、これが壊れるためであることがわかりました。

4

2 に答える 2

3

C++11 列挙型は次のように行われます。

enum class eTest : long long
{
    _test1                  = 0x0000000000000001,
    _test2                  = 0x0000000000000002,
};

厳密な型の列挙を参照してください

[編集:]そして、VS 2010にはこれをサポートするコンパイラがないと思います。C++11 列挙型は、MSVC++ 10 コンパイラで部分的にしかサポートされていなかったと思います

サイズに関しては、データ型のサイズについて説明しているこのページをチェックしてください。Microsoft は、コンパイラの 32 ビット バージョンと 64 ビット バージョンの間で大きな違いはありません。

于 2012-10-10T16:05:10.977 に答える