El modificador const
en C++ antes de la estrella significa que al usar este puntero, el valor apuntado no se puede cambiar, mientras que el puntero puede señalar algo diferente. En el siguienteargumento de puntero no const a un parámetro de puntero doble const
void justloadme(const int **ptr)
{
*ptr = new int[5];
}
int main()
{
int *ptr = NULL;
justloadme(&ptr);
}
justloadme
función no se debe permitir que editar los valores enteros (si los hay) que apunta el parámetro pasado, mientras que puede editar el valor int * (ya que la const no es después de la primera estrella) , pero ¿por qué obtengo un error de compilación tanto en GCC como en VC++?
GCC: error: conversión no válida int**
-const int**
VC++: error C2664: 'justloadme': no se puede convertir parámetro 1 de 'int **' a 'const int **'. La conversión pierde calificadores
¿Por qué dice que la conversión pierde calificadores? ¿No está ganando el calificador const
? Además, ¿no es similar a strlen(const char*)
donde pasamos un no-const char*
http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.17 – Anycorn