2011-07-26 46 views
12

這裏有兩個相關的問題:C++:將枚舉作爲值或作爲const引用傳遞是更好嗎?

A)如何實現枚舉?例如,如果我有以下代碼:

enum myType 
{ 
    TYPE_1, 
    TYPE_2 
}; 

實際發生了什麼?我知道你可以將TYPE_1和TYPE_2視爲整數,但它們實際上只是整數? B)根據這些信息,假設傳入的枚舉不需要改變,將myType作爲值或作爲const引用傳遞給函數會更有意義嗎?

例如,這是更好的選擇:

void myFunction(myType x){ // some stuff } 

void myFunction(const myType& x) { // some stuff } 

回答

11

明智的速度幾乎肯定無所謂 - 任何體面的C++編譯器都會傳遞一個int。

重要的一點是可讀性 - 這會讓你的代碼對讀者更加明顯嗎?

如果很明顯這些枚舉實際上只是整數,那麼我會通過它們來傳遞它們,就好像它們是整數一樣。使用const ref可能會導致程序員三次思考(從來不是一個好主意!)

但是,如果您以後要用類替換它們,那麼保持API相同並強制執行常量可能會有意義。

0

通內置簡單類型(字符,短,整型,枚舉,浮點,指針)由值

枚舉實現爲整數,你甚至可以爲它們顯式指定值。

0
typedef enum 
{ 
    FIRST_THING, 
    SECOND_THING 
} myType; 

然後像使用int一樣使用它。按價值傳遞。

1

我知道你可以將TYPE_1和TYPE_2視爲整數,但它們實際上只是整數嗎?

是的。他們是完整的類型,很可能他們的類型只是int,因爲這是最自然的類型。所以你可以通過價值傳遞;經過引用不會給你任何顯着的優勢。

順便提及,以供參考,該部分§7.2/ 5說,

基礎類型枚舉的是可以 代表所有在枚舉所定義的枚舉值的整數類型。它是 實現定義其積分類型用作底層 類型枚舉不同的是基礎類型不得 均比int更大,除非一個枚舉的值不能在一個int 或無符號整型適合。如果枚舉器列表爲空,則底層類型 就好像該枚舉具有值爲0的單個枚舉器。應用於枚舉類型,枚舉類型或枚舉數的對象的sizeof()的值 是應用於基礎類型的sizeof()的值 。

8

C++標準(§ 7.2/5)保證枚舉的基礎類型是一個整型,它可以表示枚舉中定義的所有枚舉值。所以按照價值傳遞它,不要讓代碼更加複雜。

相關問題