2013-07-03 4 views
9

У меня в основном два вопроса, возможно, они связаны между собой, поэтому я поместил их в один.Класс enum C++ 11 по ссылке или значению

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

enum class MyEnumClass : unsigned short { 
    Flag1 = 0, 
    Flag2 = 1, 
    Flag3 = 2, 
    Flag4 = 4, 
}; 

Теперь давайте говорить, что мы имеем функцию сиговых

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 - 

ответ

4

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

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

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

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

+3

Наверное, стоит отметить, что в этом случае от перемещения ничего не получится. – juanchopanza

+0

@juanchopanza: Правда, точно указано. Благодаря! –

3

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