我使用gcc,它在我有的體系結構(一般不知道)上實現枚舉爲32位整數。如果我嘗試分配一個枚舉值過大時,我得到枚舉與64位底層整數
warning: integer overflow in expression
有沒有辦法讓GCC使用64位整數作爲底層的整數類型? gcc的具體方法很好,但如果有便捷的方式,那就更好了。
**編輯** 這是一個相關的帖子:64 bit enum in C++?
不像這個問題,我也有興趣在GNU擴展。
我使用gcc,它在我有的體系結構(一般不知道)上實現枚舉爲32位整數。如果我嘗試分配一個枚舉值過大時,我得到枚舉與64位底層整數
warning: integer overflow in expression
有沒有辦法讓GCC使用64位整數作爲底層的整數類型? gcc的具體方法很好,但如果有便捷的方式,那就更好了。
**編輯** 這是一個相關的帖子:64 bit enum in C++?
不像這個問題,我也有興趣在GNU擴展。
以下作品我-std=c++0x
,而與-std=c++98
雖然
enum EnumFoo {
FooSomething = 0x123456789ULL
};
我測試了這個與
$ g++ --version
g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3
一個選項:使用特定類型的static const
成員創建模板類。
例如std::tr1::integral_constant
,在GNU發行版(至少是我使用的那個)中用C++/tr1/type_traits聲明。
一個枚舉值:你的聲明可能物質(例如,使用U
,L
如適用)
您使用的是哪個版本的gcc?這似乎不適用於4.3.4,我仍然得到一個32位枚舉。 – 2010-10-21 19:15:05
@pythonic隱喻:更新我的答案來解決您的問題。 – Arun 2010-10-21 19:57:18
'ULL'應該告訴你的編譯器使用C99的'unsigned long long'類型,它的最小寬度爲64位(在我意識到的所有實現中定義爲正好64位)。但是,如果你的編譯器不支持'long long'(例如,如果你使用GCC並使用* strict * C++ 98,這就是'-std = C++ 98'的意思),'ULL'將會是看作是一個錯誤,或者額外的'L'將被忽略,並且你將得到一個'unsigned long'(它通常是32位寬)。我不記得準確的哪種行爲符合標準,但如果它是給你32位,我懷疑後者。 – 2010-10-21 19:57:49