Programming

enum Types in C++

steloflute 2012. 7. 13. 17:06
http://www.enel.ucalgary.ca/People/Norman/enel315_winter1997/enum_types/

 

Introduction

In C and C++, enum types can be used to set up collections of named integer constants. (The keyword enum is short for ``enumerated''.)

The traditional C way of doing this was something like this:

#define SPRING   0
#define SUMMER   1
#define FALL     2
#define WINTER   3

An alternate approach using enum would be

enum { SPRING, SUMMER, FALL, WINTER };

[back to top of document]


enum declarations

There are two kinds of enum type declarations. One kind creates a named type, as in

enum MyEnumType { ALPHA, BETA, GAMMA };

If you give an enum type a name, you can use that type for variables, function arguments and return values, and so on:

enum MyEnumType x;  /* legal in both C and C++ */
MyEnumType y;       // legal only in C++

The other kind creates an unnamed type. This is used when you want names for constants but don't plan to use the type to declare variables, function arguments, etc. For example, you can write

enum { HOMER, MARGE, BART, LISA, MAGGIE };

[back to top of document]


Values of enum constants

If you don't specify values for enum constants, the values start at zero and increase by one with each move down the list. For example, given

enum MyEnumType { ALPHA, BETA, GAMMA };

ALPHA has a value of 0, BETA has a value of 1, and GAMMA has a value of 2.

If you want, you may provide explicit values for enum constants, as in

enum FooSize { SMALL = 10, MEDIUM = 100, LARGE = 1000 };

[back to top of document]


C++ enum type conversion rules

These rules apply to C++ only. The rules for C are different.

There is an implicit conversion from any enum type to int. Suppose this type exists:

enum MyEnumType { ALPHA, BETA, GAMMA };

Then the following lines are legal:

int i = BETA;      // give i a value of 1
int j = 3 + GAMMA; // give j a value of 5

On the other hand, there is not an implicit conversion from int to an enum type:

MyEnumType x = 2;    // should NOT be allowed by compiler
MyEnumType y = 123;  // should NOT be allowed by compiler

Note that it doesn't matter whether the int matches one of the constants of the enum type; the type conversion is always illegal.

 

 

'Programming' 카테고리의 다른 글

Portable Executable 101 - a windows executable walkthrough  (0) 2012.07.18
(C) How do I share variables between different .c files?  (0) 2012.07.14
(C++) shared_ptr  (0) 2012.07.10
Online syntax highlighting  (0) 2012.07.10
C++ reference type  (0) 2012.07.10