我正在玩Visual Studio 11 Beta。我使用的是強類型枚舉來形容一些標誌在Visual Studio 11中強類型枚舉類(測試版)
enum class A : uint32_t
{
VAL1 = 1 << 0,
VAL2 = 1 << 1,
};
uint32_t v = A::VAL1 | A::VAL2; // Fails
當我試圖如上我收到以下錯誤
error C2676: binary '|' : 'A' does not define this operator or a conversion to a type acceptable to the predefined operator
把它們結合起來這與編譯器錯誤或就是我根據C++ 11標準嘗試無效?
我的假設是,大家以前枚舉聲明就相當於寫
struct A
{
enum : uint32_t
{
VAL1 = 1 << 0,
VAL2 = 1 << 1,
};
};
uint32_t v = A::VAL1 | A::VAL2; // Succeeds, v = 3
可能的重複[在C++中使用C標誌枚舉](http://stackoverflow.com/questions/10339076/using-c-flag-enums-in-c) – dasblinkenlight
@dasblinkenlight:我不認爲它是一個確切的重複,因爲這個問題是關於從'枚舉'轉換爲'int',這是正常的枚舉罰款。 –
如果枚舉可以隱式轉換爲不同的類型,那麼它不會完全是強類型的......你確定你不想只是普通的舊'enum'嗎? – ildjarn