簡體   English   中英

轉換為積分類型后C ++枚舉類型的符號不正確

[英]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;

A60xffffFFF1 ,應該是無符號值(十進制4294967281)。 並且,由於此值不能由int表示,因此應將其轉換為unsigned int 但很明顯,當用於比較時, A6被轉換為-15。 為什么會這樣?

這是MS VC ++的一個錯誤。 在這里描述了它

盡管描述是用俄語寫的,但您可以使用例如google service translate將其翻譯成英語。

相對於C ++標准本身的枚舉,也存在缺陷。 在這里也有描述

還可以在此處訪問有關枚舉討論(此時為英語)的另一個參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM