Вы говорите о конструкторе по умолчанию (а не о назначении или конструкторе копирования).
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.
Потому что ссылка * как const указатель *, не может быть изменена (только инициализирована) – firda
В исходном вопросе вы уже показали, что вы понимаете аргументацию 'const': вы не можете повторно назначить переменную' const'. Поскольку эти же рассуждения применимы и к ссылочным переменным, я не совсем понимаю, о чем вы спрашиваете. – hvd