通过引用或值枚举类C++11
Enum class C++11 by reference or value
我基本上有两个问题,可能它们是相关的,所以我将它们放在一个问题中。
在传递给函数时,我们应该通过引用或值传递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 -
它不是继承基元类型,而是"告诉"实现使用指定的类型(unsigned short
)作为枚举器的基础类型。
您可以简单地将枚举类对象视为任何其他类对象,并在将其传递给函数时应用相同的规则。
- 如果要修改函数内部的枚举类对象,请通过引用传递它
- 如果您只想读取函数内部的对象,请通过常量引用传递它
移动语义是一种语言运行时性能增强功能,它利用从右值移动的机会,而不是应用性能密集型的复制语义。r值引用和move语义不仅限于move构造函数和move赋值运算符,还可以与其他函数一起使用。如果你有可以利用这种优化的场景,那么利用它们是完全可以的。
考虑到枚举器使用指定的类型unsigned short
作为底层类型,正如Alok Save所指出的,按值传递这些对象可能是个好主意(除非你想在函数中更改它们的值作为副作用,在这种情况下你应该使用引用。)
相关文章:
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 连续枚举 C++11
- C ++枚举范围无法使用-std=c ++ 98进行编译,但使用-std=c ++ 11可以
- 安全使用严格枚举 C++ 11
- C++11 类中放置的枚举类的重载运算符
- 初始化枚举类 (C++11) 类型的二维 std::数组
- C++11 枚举前向导致"underlying type mismatch"
- 枚举布尔模板参数在C 11中
- 我可以创建一个可以接受任何枚举的模板(非类型)param类吗?C 11
- 使用 C++11 可变参数模板初始化枚举到字符串映射
- C++11 枚举类:加上 int 编译失败,为什么
- C++11 枚举类命名空间块
- 传递 C++11 枚举类作为模板,同时自动推断其类型
- C 11枚举类实例化
- 类型安全的c++11枚举类标志的模板
- 在C++11中分离枚举声明和定义
- 是否可以在C++11中指定枚举的位宽
- 如何在C++11中输出枚举类的值
- 如何在 C++11 中“使用”弱枚举
- C++11 在开关大小写中混合枚举类和无符号 int 将无法编译