C++: Is it better to pass an enum as a value or as a const reference?

Casey Patton picture Casey Patton · Jul 26, 2011 · Viewed 12.4k times · Source

There are sort of two related questions here:

A) How is enum implemented? For example, if I have the code:

enum myType
{ 
   TYPE_1,
   TYPE_2
};

What is actually happening? I know that you can treat TYPE_1 and TYPE_2 as ints, but are they actually just ints?

B) Based on that information, assuming that the enum passed in didn't need to be changed, would it make more sense to pass myType into a function as a value or as a const reference?

For example, which is the better choice:

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

or

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

Answer

Martin Beckett picture Martin Beckett · Jul 26, 2011

Speed wise it almost certainly doesn't matter - any decent C++ compiler is just going to pass a single int.

The important point is readability - which will make your code more obvious to the reader?

If it's obvious that these enums are really just ints then I would pass them by value, as if they were ints. Using the const ref might cause a programmer to think twice (never a good idea!)

However - if you are later going to replace them with a class then keeping the API the same and enforcing the const-ness might make sense.