fonction c++: pass non const argument const paramètre de référence
supposons que j'ai une fonction qui accepte const référence argument pass,
int func(const int &i)
{
/* */
}
int main()
{
int j = 1;
func(j); //pass non const argument to const reference
j=2; //reassign j
}
ce code fonctionne très bien.selon C++ primer, que cet argument de passer à cette fonction comme suit,
int j=1;
const int &i = j;
dans laquelle i est un synonyme(alias) de j,
ma question est: si i est un synonyme de j, et i est défini comme const, c'est le code:
const int &i = j
redelcare non const variable variable const? pourquoi cette expression est légal en c++?
Vous devez vous connecter pour publier un commentaire.
La référence est const, pas l'objet. Il ne change pas le fait que l'objet est mutable, mais vous avez un nom pour l'objet (
j
) à travers lequel vous pouvez le modifier, et d'un autre nom (i
), grâce à laquelle vous ne pouvez pas.Dans le cas de la const paramètre de référence, cela signifie que
main
peut modifier l'objet (car il utilise son nom pour lui,j
), alors quefunc
ne pouvez pas modifier l'objet tant qu'il n'utilise son nom pour lui,i
.func
pourrait, en principe, modifier l'objet en créant encore une autre référence ou un pointeur vers elle avec unconst_cast
, mais ne le font pas.j
' sont des noms. Tous deux se réfèrent au même objet. Souvent on dit que quelque chose "est" son nom, ou que le nom de "est" de l'objet. Par exemple, je pourrais dire "je suis Steve". Mais c'est l'imprécision de la terminologie, les deux ne sont pas la même chose. Je peux aussi dire, "'Steve' commence avec un grand "S'". Cela n'implique pas que I commencer avec un grand "S". Les guillemets autour de "Steve" sont là pour indiquer que je suis en train de parler au nom de, pas de l'objet auquel il se réfère.i
etj
sont synonymes parce qu'ils sont les deux noms pour le même objet, mais leurs propriétés que les noms sont différents.Il déclare une référence à une constante de type entier.
À l'aide de cette référence, vous ne serez pas en mesure de modifier la valeur de l'entier qu'il référence.
Vous pouvez toujours modifier la valeur à l'aide de la variable d'origine nom de j, tout simplement pas l'aide de la constante référence que j'.