In parole semplici Ho un semplice puntatore:non-const riferimento a un puntatore non-const punta all'oggetto const
int* a;
ora, desidero cambiare il valore di questo puntatore. Voglio farlo in una funzione. La funzione assicura che non cambierà oggetto, a cui punta il puntatore, ma cambierà un puntatore stesso. Questo è il motivo per cui vorrei che questa funzione prendesse argomenti come: riferimento non const (poiché il valore del puntatore verrà modificato) al puntatore non-const (il puntatore stesso può essere modificato) puntando all'oggetto const (la funzione assicura, quell'oggetto, quel puntatore punta a non sarà cambiato).
La funzione più semplice sarebbe:
void function(const int*& a){
a = 0;
}
ma quando provo a chiamare questa funzione:
int main(){
int* a;
function(a);
return 0;
}
Compiler è infelice e dice:
l'inizializzazione non valida di non const riferimento di tipo 'const int * &' da un valore di tipo 'const int *' funzione (a);
Non riesco a capire questo errore, per quanto mi riguarda non c'è rvalue coinvolti (sto passando un riferimento all'oggetto, che esiste già in pila.)
domanda è, come posso farlo propriamente?
esempio può essere trovato qui: https://ideone.com/D45Cid
EDIT:
È stato suggerito, che la mia domanda è simillar al Why isn't it legal to convert "pointer to pointer to non-const" to a "pointer to pointer to const"
La mia domanda è diverso, come io non uso del puntatore per puntatore Io uso solo puntatore a oggetto/valore e memorizzo il riferimento ad esso, quindi situazione come nella risposta a questa domanda:
const char c = 'c';
char* pc;
const char** pcc = &pc; // not allowed
*pcc = &c;
*pc = 'C'; // would allow to modify a const object
È impossibile nel mio caso, in quanto non è possibile effettuare il dereferenziamento del puntatore di livello superiore (non ho un puntatore del genere).
Inoltre ho interrogato sulla soluzione bella e pulita a questo problema, che non è coperto in una domanda
non sono sicuro se è possibile mescolare puntatore e riferimento. Beh, è C++, dovresti, ma per favore non farlo. Nessuno capirà il tuo codice! – hr0m
@Holt Non riesco a farlo. Questo è un semplice esempio, ma in codice reale in seguito eseguirò operazioni su questo oggetto, quindi non posso dichiarare puntatore come const – DawidPi
@ hr0m Puntatore al puntatore è meglio, che puntatore a riferimento? Quelli a mio parere hanno significati diversi. – DawidPi