Il modificatore const
in C++ prima di stella indica che utilizzando questo puntatore il valore puntato non può essere modificato, mentre il puntatore stesso può essere fatto puntare qualcos'altro. Nel seguitoargomento puntatore non-const a un parametro const puntatore doppio
void justloadme(const int **ptr)
{
*ptr = new int[5];
}
int main()
{
int *ptr = NULL;
justloadme(&ptr);
}
justloadme
funzione non dovrebbe essere consentito di modificare i valori interi (eventuale) puntato dal param passata, mentre può modificare il valore int * (poiché il const non è dopo la prima stella) , ma ancora perché ottengo un errore del compilatore sia in GCC che in VC++?
GCC: errore: la conversione non valida int**
-const int**
VC++: errore C2664: 'justloadme': non può convertire il parametro 1 da 'int **' a 'const int **'. La conversione perde i qualificatori
Perché si dice che la conversione perde qualificatori? Non sta guadagnando il qualificatore const
? Inoltre, non è simile a strlen(const char*)
dove passiamo un non-const char*
http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.17 – Anycorn