簡體   English   中英

C ++枚舉和編譯器依賴

[英]C++ enumerations and compiler dependency

我目前有一個枚舉的代碼,其中一個值被設置,其余的由編譯器使用前一個值+1設置,或者我希望如此。

此功能是否依賴於枚舉類型編譯器,下面的示例如下所示。

enum FUNC_ERROR_CODE    
{
    FUNC_SUCCESS,
    FUNC_ERROR_1 = 24,
    FUNC_ERROR_2,
    FUNC_ERROR_3
}

假設FUNC_ERROR_2的值為25且FUNC_ERROR_3的值為26,是否安全,無論使用哪種編譯器。

我正在對此進行編碼,因為函數可以返回一個整數值,0總是成功,任何其他值都可以表示失敗。

可以安全地假設:

  • 枚舉聲明[dcl.enum]

    枚舉器列表中的標識符聲明為常量,並且可以出現在需要常量的位置。 帶=的枚舉器定義為關聯的枚舉器提供由constant-expression指示的值。 常量表達式應為整數或枚舉類型。 如果第一個枚舉器沒有初始化器,則相應常量的值為零。 沒有初始值設定項的枚舉器定義為枚舉數提供了通過將前一個枚舉數的值增加1而獲得的值

但是如果你有一個類型安全的枚舉: 使用它 不要依賴於轉換為整數/從整數轉換。

恕我直言,如果您的枚舉必須具有固定值,然后明確地修復這些值,您將確定您的枚舉中包含的值。

但是如果你只需要比較你的枚舉,讓編譯器為你做。 if FUNC_ERROR_2 > FUNC_ERROR_1 ...寫一些這樣的比較應該是安全的if FUNC_ERROR_2 > FUNC_ERROR_1 ...

就Visual Studio 2010而言,它是安全的。 msdn中查看以下示例:

列表中的任何枚舉器(包括第一個)都可以初始化為默認值以外的值。假設Suit的聲明如下:

enum Suit {
   Diamonds = 5,
   Hearts,
   Clubs = 4,
   Spades
};

然后,鑽石,心形,俱樂部和黑桃的價值分別為5,6,4 和5 請注意,5不止一次使用。

我很確定編譯器被強制為每個新值遞增。

暫無
暫無

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

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