這與Are C++ enums signed or unsigned?密切相關。根據JavaMan的回答,enum
既不是signed
也不是unsigned
。但它確實遵循整體促銷規則。如何覆蓋枚舉的積分促銷規則?
我與使用enums
圖書館工作,然後將其傳遞到預期大多unsigned
類型(如unsigned int
和size_t
)其他類對象。由於語言的規則,啓用-Wsign-conversion
警告以努力捕捉合法錯誤導致數量誤報。
規則類創造了一種難以確保類型安全並且能夠捕捉到常見錯誤的情況。這很困難,因爲我想避免像static_cast
這樣的東西在整個代碼中灑落。
有沒有辦法改寫enums
爲具體的signed
或unsigned
類型的語言默認行爲? (類似於您可以指定char
的方式是有符號的還是無符號的)。
相關,該庫是在20世紀90年代編寫的,因此它支持一些較老的編譯器。如果解決方案甚至可以解決C++ 03和更早的問題,那將是非常好的。
從How to guard move constructors for C++03 and C++11?,我知道在實踐中沒有可靠的方法來檢測其他C++語言變體何時生效。在使用-std=c++03
和-std=c++11
進行Clang 3.5測試期間,它的表面平坦下來。
你可以使用C++ 11,你可以修改這個庫中的枚舉定義? – Praetorian
@Praetorian - 不幸的是,我們不能依賴C++ 11。我們仍然需要支持C++ 03(也可能更早)。好的一面,我可以修改庫中的枚舉定義。如果需要的話,該圖書館是魏岱的[Crypto ++](http://www.cryptopp.com/)。對不起提早不提供這些信息。 – jww