Модификатор const
в C ++ перед звездочкой означает, что с помощью этого указателя нельзя изменить значение, на которое указывает указатель, а сам указатель можно сделать так, чтобы он указывал на что-то другое. В приведенной ниже функции
void justloadme(const int **ptr)
{
*ptr = new int[5];
}
int main()
{
int *ptr = NULL;
justloadme(&ptr);
}
justloadme
нельзя разрешать редактировать целочисленные значения (если они есть), указываемые переданным параметром, в то время как она может редактировать значение int * (поскольку const не следует за первой звездой), но все же, почему я получаю ошибку компилятора в GCC и VC ++?
GCC: ошибка: неправильное преобразование из int **
в const int **
VC ++: ошибка C2664: «justloadme»: невозможно преобразовать параметр 1 из «int **» в «const int **». Конверсия теряет квалификаторы
Почему говорится, что конверсия теряет классификаторы? Isn» Получает ли он const
квалификатор? Кроме того, разве это не похоже на strlen (const char *)
, где мы передаем неконстантный char *