我基本上有两个问题可能是相关的,所以我会把它们放在一起。
我们是否应该在传递给函数时通过引用或值传递C ++ 11中的枚举类。它继承了原始类型,但它是通过的整个对象吗?因为枚举类是类型安全的;
enum class MyEnumClass : unsigned short {
Flag1 = 0,
Flag2 = 1,
Flag3 = 2,
Flag4 = 4,
};
现在我们假设我们有函数sig
const char* findVal(const MyEnumClass& enumClass);
^
should this be by const ref? __|
我的另一个问题是 -
SHOULD IT BE BY MOVE like (MyEnumClass&&) - I am still learning/understanding
move semantics and rvalue so I am not sure if move semantics are only for
constructors or can be for member or static funcs -
答案 0 :(得分:4)
它不继承原始类型,而是告诉实现使用指定的类型(unsigned short
)作为枚举器的基础类型。
您可以简单地将枚举类对象视为任何其他类对象,并在将其传递给函数时应用相同的规则。
移动语义是一种语言运行时性能增强功能,它利用机会从rvalues移动而不是应用性能密集的复制语义。 r值引用和移动语义不仅限于移动构造函数和移动赋值运算符,还可以与其他函数一起使用。如果你有可以利用这种优化的场景,那么使用它们就完全没问题了。
答案 1 :(得分:3)
考虑到枚举器使用指定的类型unsigned short
作为基础类型,正如Alok Save指出的那样,按值传递这些对象可能是个好主意(除非你想在函数中改变它们的值)作为副作用,在这种情况下你应该使用引用。)