У меня в основном два вопроса, может быть, они связаны, поэтому я соберу их в один.
Должны ли мы передавать перечислимый класс в 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 -
Он не наследует примитивный тип, а скорее говорит реализации использовать указанный тип (unsigned short
) в качестве основного типа для перечислителей.
Вы можете просто обработать объект класса enum как любой другой объект класса и применить те же правила при передаче его функциям.
Семантика перемещения — это функция повышения производительности языка во время выполнения, которая использует возможности перехода от значений r вместо применения семантики копирования, которая требует высокой производительности. Ссылки на r-значение и семантика перемещения не только ограничены конструктором перемещения и оператором присваивания перемещения, но также могут использоваться с другими функциями. Если у вас есть сценарии, которые могут использовать эту оптимизацию, то прекрасно использовать их.
Учитывая, что перечислители используют указанный тип unsigned short
как базовый тип, как указал Alok Save, вероятно, будет хорошей идеей передавать такие объекты по значению (если только вы не хотите изменить их значение в функции в качестве побочного эффекта, в этом случае вам следует использовать ссылку).