Подпись конструктора копирования C ++ для структуры с перечислением - PullRequest
0 голосов
/ 02 февраля 2012

Существует ли причина, по которой неявный конструктор копирования для структуры, содержащей перечисление, не использует версию const - или почему вообще не существует конструктора копирования? Я ожидал бы, что будет создан неявный конструктор копирования, т.е.

X(const X& x)

Я знаю, что есть правила, когда это может произойти, например, если переменная-член не имеет конструктора копирования или неконстантного конструктора копирования. Я предполагаю, что мой вопрос в том, как это относится к перечислениям и применимо ли это правило?

Добавление моего собственного конструктора копирования, похоже, работает.

Пример - какие, если таковые имеются, конструкторы копирования создаются неявно:

struct MyStruct {
  int myInt;
  double myDouble; 
  MyEnum myEnum;
};

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Ваше предположение о перечислениях неверно;проблема в другом.Следующий код компилируется без проблем, если явно не определен конструктор копирования, и не может скомпилироваться, если существует конструктор копирования с неконстантной ссылкой.пример, демонстрирующий ошибку, необходим, чтобы понять, в чем реальная проблема.

0 голосов
/ 02 февраля 2012

Это немного из моего опыта.

Когда вы пытаетесь построить X из неконстантного экземпляра lvalue X, подпись X(X& ) будет более близким совпадениеми быть выбранным.

...