2013-03-02 1 views
0

C++ я просто играл с перечислениями в C++, и я до сих пор не могу понять эти два примера:Я не могу понять, как перечисление работает в

enum Colors { 
    WHITE, BLACK, RED 
}; 

Colors colors[3]; 
colors[0] = WHITE; // it's OK 

и:

enum Colors { 
    WHITE, BLACK, RED 
}; 

int colors[3]; 
colors[0] = WHITE; // it's OK 

I знайте, что элементы перечисления подсчитываются от 0 до n-1, поэтому все они имеют значения. Но почему мне нужно использовать Colours name enumeration для объявления массива? Почему я не могу использовать int вместо этого? Или я могу?

Спасибо.

+0

Да, 'enum' довольно слабый, если вы привыкли к перечисляемым типам из других языков –

+0

Он предназначен для обеспечения безопасности типа , так что кто-то не просто передал случайное целочисленное значение функции, ожидающей значения перечисления, не будучи уведомленным компилятором. –

ответ

2

enum позволяет использовать английские названия для ваших значений между 0 и n-1. Это гораздо симпатичнее и понятным для следующего разработчика, чтобы иметь

int myColor = Colors::WHITE; 

чем

int myColor = 0; // What color is this? I don't know 
+0

Итак, какая разница между цветами myColor; и int myColor? – Andrius

+0

@ Andrius Разница в том, что цвета myColor имеют тип Colors, а int myColor имеет тип int. – alestanis

+0

, но оба они могут удерживать WHITE от переименования цветов, не так ли? – Andrius

2

Но почему я должен использовать название цвета перечисления объявить массив? Почему я не могу использовать int вместо этого? Или я могу?

Вы можете:

enum { 
    WHITE, 
    BLACK 
}; 

int arr[3]; 
arr[0] = WHITE; 
2

Но почему я должен использовать название цвета перечисления объявить массив? Почему я не могу использовать int вместо этого? Или я могу?

Да, вы можете объявить переменную как int вместо того, чтобы объявить его как Colors, но весь смысл с помощью enum что как разработчик и компилятор может сказать, что допустимые значения ограничены. Более того, компилятор может использовать эту информацию, чтобы выдать диагностику и помочь разработчику избежать ошибок:

int color1 = WHITE; // OK 
int color1 = 0; // OK, no diagnostic, but what does 0 mean ? 
Colors color2 = WHITE; // OK 
Colors color2 = 0; // compilation warning or error