[英]Sign of C++ Enum Type Incorrect After Converting to Integral Type
我的理解是根據Integral Promotion將C ++枚舉轉換為整數類型。 在Integral Promotion期間,我們應該首先嘗試將值轉換為int
,如果值不能用int
表示,則應使用unsigned int
:
C ++ 03 conv.prom:
2)....枚舉類型(7.2)的rvalue可以轉換為以下第一種類型的rvalue,它可以表示枚舉的所有值(即bmin到bmax范圍內的值,如7.2:int,unsigned int,long或unsigned long。
但是我在VC ++ 2010中的測試顯示了相反的結果:
enum {A1=60, A2=61,A3=63,A4=64,A5=66,A6=0xffffFFF1};
const bool b1 = A6 < A1;
//result b1=true;
A6
是0xffffFFF1
,應該是無符號值(十進制4294967281)。 並且,由於此值不能由int
表示,因此應將其轉換為unsigned int
。 但很明顯,當用於比較時, A6
被轉換為-15。 為什么會這樣?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.