c++ - 通过引用或值枚举类 C++11

标签 c++ c++11 move-semantics enum-class

我基本上有两个问题,可能它们是相关的,所以我将它们合二为一。

在传递给函数时,我们应该通过引用还是值传递 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)作为枚举器的基础类型。

您可以简单地将枚举类对象视为任何其他类对象,并在将其传递给函数时应用相同的规则。

  • 如果你想修改函数内的枚举类对象,通过引用传递它。
  • 如果您只想读取函数内部的对象,则通过常量引用传递它。

move 语义是一种语言运行时性能增强功能,它利用从右值 move 的机会,而不是应用性能密集型的复制语义。右值引用和 move 语义不仅限于 move 构造函数和 move 赋值运算符,它们还可以与其他函数一起使用。如果您有可以利用此优化的场景,那么利用它们是非常好的。

关于c++ - 通过引用或值枚举类 C++11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17439672/

相关文章:

c++ - 如果我在 Linux 上有 Pthread 代码,在 std::thread 中实现相同的代码是否有优势?

C++11 - move 包含文件流的对象

c++ - 如何获取 std::set 的第一个元素

c++ - 即使我获得类窗口的句柄,BringWindowToTop 也不起作用

c++函数在之后立即调用析构函数

c++ - std::atomic 是如何实现的

c++ - std::unordered_map 自定义值类型,operator[]

c++ - 如何使用迭代器遍历 pair<int,pair<int,int>> 形式的映射

c++ - 当右值声明的变量超出范围且未被 move 时发出警告

c++ - 在映射中存储没有默认构造函数的不可复制对象 (C++11)