Модификатор 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 **». Конверсия теряет квалификаторы
Почему говорится, что конверсия теряет классификаторы? Разве он не получает квалификатор const
? Более того, разве это не похоже на strlen(const char*)
, где мы передаем неконстантный char*