Перечислить класс C ++ 11 по ссылке или значению

У меня в основном два вопроса, может быть, они связаны, поэтому я соберу их в один.

Должны ли мы передавать перечислимый класс в C ++ 11 по ссылке или значению при передаче в функцию. Это своего рода наследование примитивного типа, но передается ли весь объект? поскольку enum-классы безопасны от типов;

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 -

9

Решение

Он не наследует примитивный тип, а скорее говорит реализации использовать указанный тип (unsigned short) в качестве основного типа для перечислителей.

Вы можете просто обработать объект класса enum как любой другой объект класса и применить те же правила при передаче его функциям.

  • Если вы хотите изменить объект класса enum внутри функции, передайте его по ссылке.
  • Если вы просто хотите прочитать объект внутри функции, передайте его по постоянной ссылке.

Семантика перемещения — это функция повышения производительности языка во время выполнения, которая использует возможности перехода от значений r вместо применения семантики копирования, которая требует высокой производительности. Ссылки на r-значение и семантика перемещения не только ограничены конструктором перемещения и оператором присваивания перемещения, но также могут использоваться с другими функциями. Если у вас есть сценарии, которые могут использовать эту оптимизацию, то прекрасно использовать их.

4

Другие решения

Учитывая, что перечислители используют указанный тип unsigned short как базовый тип, как указал Alok Save, вероятно, будет хорошей идеей передавать такие объекты по значению (если только вы не хотите изменить их значение в функции в качестве побочного эффекта, в этом случае вам следует использовать ссылку).

3

По вопросам рекламы [email protected]