supponiamo di avere una funzione che accetta const passaggio argomento di riferimento,C++ funzione: passare argomento non const al parametro di riferimento const
int func(const int &i)
{
/* */
}
int main()
{
int j = 1;
func(j); // pass non const argument to const reference
j=2; // reassign j
}
questo codice funziona fine.according a C Primer ++, ciò che questo argomento passando a questa funzione è come segue,
int j=1;
const int &i = j;
in cui i è sinonimo (alias) di j,
la mia domanda è: se i è sinonimo di j, e mi è definito come const, i s il codice:
const int & i = j
redelcare una variabile non const a const variabile? perché questa espressione è legale in C++?
significa che il riferimento non è l'oggetto stesso. allora come capire la i è sinonimo di j? vuol dire che io e j siamo lo stesso oggetto, perché entrambi i e j hanno lo stesso indirizzo fisico? – fuyi
i è un riferimento alternativo all'oggetto j. Quindi un sinonimo. Hai comunque affermato che non puoi usare "i" per modificare l'oggetto a cui si riferisce. Nulla dice che non puoi usare qualche altro metodo per modificare l'oggetto a cui mi riferisco. Stai limitando le capacità di i con quella dichiarazione, non provando ad estenderli, e va bene. –
@xiaopang: "i" e "j" sono nomi. Entrambi si riferiscono allo stesso oggetto. Spesso diciamo che qualcosa "è" il suo nome, o che il nome "è" l'oggetto. Ad esempio potrei dire "I am Steve". Ma questa è una terminologia imprecisa, i due non sono la stessa cosa. Posso anche dire "Steve" inizia con la "S" maiuscola. Ciò non implica che * I * inizi con una "S" maiuscola. Le virgolette su "Steve" sono lì per indicare che sto parlando del nome, non dell'oggetto a cui si riferisce. 'i' e' j' sono sinonimi perché sono entrambi i nomi per lo stesso oggetto, ma le loro proprietà come nomi sono differenti. –