Модификатор const
в C++ перед звездой означает, что с помощью этого указателя указанное значение не может быть изменено, в то время как сам указатель может указывать на что-то другое. В нижеаргумент указателя non-const для параметра double double указателя const
void justloadme(const int **ptr)
{
*ptr = new int[5];
}
int main()
{
int *ptr = NULL;
justloadme(&ptr);
}
justloadme
функция не должна иметь возможность редактировать целые значения (если таковые имеются), на который указывает пройденный парам, в то время как он может изменить INT * значение (так как сопзЬ не после первой звезды) , но все же, почему я получаю ошибку компилятора как в GCC, так и в VC++?
GCC: ошибка: неправильное преобразование int**
const int**
в
VC++: ошибка C2664: 'justloadme': не удается преобразовать параметр 1 из 'междунар **' до 'Const INT **. Конверсия теряет квалификаторы
Почему говорится, что конверсия теряет квалификаторы? Разве он не получает квалификатор const
? Более того, разве это не похоже на strlen(const char*)
, где мы передаем неконстантный char*
http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.17 – Anycorn