Я думал, что C ++ позволяет неконстантному преобразованию const в параметрах функции, таких как:
Вы пытаетесь сделать прямо противоположное: от конста до неконста. Вызывая неконстантную функцию-член, компилятор связывает выражение (которое является Node const
с Node&
для привязки указателя this
). Таким образом, он отбросит const - недопустимо, потому что вызовет неконстантную функцию для объекта const.
/* class Foo */ {
Foo(int bar);
}
/* Foo:: */ Foo(const int bar)
{
//lala
}
Ну, этот код - совсем другое дело. Он объявляет функцию (конструктор) два раза, с той лишь разницей, что один раз параметр является константным, а другой - нет. Тип функции один и тот же оба раза, поэтому они не конфликтуют (параметр const
будет влиять только на тело функции локально - это не будет иметь никакого значения для вызывающей стороны). Кроме того, этот код не содержит никакого вызова (при условии, что первый блок находится в некоторой функции).
Если вам интересно: если две вышеупомянутые версии идентичны - почему не ниже? Тогда это происходит потому, что ниже содержится еще один уровень косвенности: ниже сама ссылка ( верхний уровень ) не является константой (вы не можете поместить const
непосредственно в саму ссылку), но Тип, на который ссылаются, является const. В это время const не игнорируется при определении типа функции.
/* class Foo */ {
Foo(int &bar);
}
// different thing, won't work!
/* Foo:: */ Foo(const int &bar)
{
//lala
}