C++:将枚举作为值或作为const引用传递是否更好?

Cas*_*ton 23 c++ performance enums const-reference

这里有两个相关的问题:

A)如何实现枚举?例如,如果我有代码:

enum myType
{ 
   TYPE_1,
   TYPE_2
};
Run Code Online (Sandbox Code Playgroud)

究竟发生了什么?我知道您可以将TYPE_1和TYPE_2视为整数,但它们实际上只是整数?

B)基于该信息,假设传入的枚举不需要更改,将myType作为值或const引用传递给函数会更有意义吗?

例如,哪个是更好的选择:

void myFunction(myType x){ // some stuff }
Run Code Online (Sandbox Code Playgroud)

要么

void myFunction(const myType& x) { // some stuff }
Run Code Online (Sandbox Code Playgroud)

Mar*_*ett 20

速度方面几乎肯定无所谓 - 任何体面的C++编译器都只会传递一个int.

重要的一点是可读性 - 这将使您的代码对读者更加明显?

如果很明显这些枚举真的只是整数,那么我会按价值传递它们,就好像它们是整数一样.使用const ref可能会让程序员三思而行(绝不是个好主意!)

但是 - 如果您稍后要用类替换它们,那么保持API相同并强制执行const-ness可能是有意义的.


Kir*_*sky 10

C++标准(第7.2/5节)保证枚举的基础类型是一个整数类型,可以表示枚举中定义的所有枚举器值.因此,按值传递它,不要让你的代码更复杂.