2014-08-31 1 views
-1

я прочитал это в книге:синтезируется конструктор по умолчанию, как удалено

Синтезированный оператор копирования назначения определяется как удаляется, если участника удаленного или оператор копирования назначения недоступен, или если класса имеет константу или ссылочный элемент.

И почему мы не можем использовать ссылочный тип?

+0

Потому что ссылка * как const указатель *, не может быть изменена (только инициализирована) – firda

+1

В исходном вопросе вы уже показали, что вы понимаете аргументацию 'const': вы не можете повторно назначить переменную' const'. Поскольку эти же рассуждения применимы и к ссылочным переменным, я не совсем понимаю, о чем вы спрашиваете. – hvd

ответ

1

Вы говорите о конструкторе по умолчанию (а не о назначении или конструкторе копирования).

Const член типа которого не явно определить конструктор по умолчанию

Он запрещает конструктор по умолчанию, иначе вы будете иметь неинициализированное значение константного (так бесполезно). (если это не было const, то факт, что он был неинициализирован, не является проблемой, мы можем назначить его позже).

ссылка элемент, который не имеет в своем классе инициализатору

запрещено также, как и ссылка похожа на не пустой указатель сопзЬ.

struct NoDefaultConstructor 
{ 
    // No default constructor can be generated. 

    const int i; // which value to set by default ? 
    int& r; // reference which object by default? 
}; 

struct InClassInitializerSoDefaultConstruct 
{ 
    // default constructor is generated here. 
    const int i = 42; 
    int j; 
    int& r = j; 
}; 

Редактировать, чтобы ответить отредактирован Q

Для присвоения const значение не может быть изменено. , а ссылка - не указатель константы.

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

+0

Извините. Я изменил свой вопрос. – Zeukis

Смежные вопросы