Ce qui est une référence constante? (pas une référence à une constante près)
Une jolie théorique question...Pourquoi références constantes ne se comportent pas de la même manière constante les pointeurs et je peux effectivement changer l'objet qu'ils désignent? Ils semblent vraiment comme une autre plaine de la déclaration de la variable. Pourquoi aurais-je les utiliser? C'est un petit exemple que je dirige, qui compile et s'exécute sans erreur:
int main (){
int i=0;
int y=1;
int&const icr=i;
icr=y; //Can change the object it is pointing to so it's not like a const pointer...
icr=99; //Can assign another value but the value is not assigned to y...
int x=9;
icr=x;
cout<<"icr: "<<icr<<", y:"<<y<<endl;
}
- Regardez
i
avant et aprèsicr=y;
. - Est-ce que même le compiler?
- voir parashift.com/c++-faq-lite/const-correct.html#faq-18.7
- vérifier la valeur de x à la fin . 9 . depuis l'icr qui se réfère à i a été changé à 9.
- Cela ne compile pas!!
int&const icr=i;
est faux.
Vous devez vous connecter pour publier un commentaire.
Une réponse la plus précise.
N' “X& const x” a un sens?
X& const x
est mal formé, c'est une erreur dans la FAQLa déclaration
icr=y;
ne pas faire de référence reportez-vous ày
; il affecte la valeur dey
la variableicr
se réfère,i
.Références sont intrinsèquement
const
, c'est que vous ne pouvez pas changer ce à quoi ils se réfèrent. Il y a des "const
des références qui sont vraiment des références àconst
", c'est que vous ne pouvez pas modifier la valeur de l'objet, ils se réfèrent. Ils sont déclaréesconst int&
ouint const&
plutôt queint& const
bien.Ce qui est une référence constante (pas une référence à une constante près)
Un Référence Constante est en fait un Référence à une Constante.
Une constante référence/Référence à une constante est notée par:
Il signifie fondamentalement, vous ne pouvez pas modifier la valeur de type de l'objet dont la Référence est.
Par Exemple:
En essayant de modifier la valeur(assigner
1
) de la variablej
par référence const,i
des résultats dans d'erreur:Ne change pas la référence, il attribue la valeur du type pour lequel la référence est.
Les références ne peuvent pas être réalisés de renvoyer toute autre variable que celui auquel ils sont liés à l'Initialisation.
Première déclaration attribue la valeur
y
ài
Deuxième déclaration attribue la valeur
99
ài
const Type&
est équivalent àType const&
?Par "référence constante" je suppose que tu veux réellement dire "référence à la constante de données". Conseils sur la façon de l'autre côté, peut être un pointeur constant (le pointeur lui-même est constante, pas les données qu'il pointe vers), un pointeur constant de données, ou les deux.
int & const icr = i;
) n'est pas une référence à une constante.Ce code est mal formé:
De référence: C++17 [dcl.ref]/1:
Cette règle a été présent dans tous standardisés versions de C++. Parce que le code est mal formé:
Le compilateur doit rejeter le programme; et si ça ne marche pas, le fichier exécutable du comportement est complètement défini.
NB: vous ne savez Pas comment aucun des autres réponses ont mentionné ce pourtant... personne n'a accès à un compilateur?
Comme il est mentionné dans un autre réponses, une référence est intrinsèquement const.
Une fois que vous avez initialisé une référence à un objet, vous ne pouvez pas unbound cette référence à l'objet qu'elle désigne. Un des ouvrages de référence comme un alias.
Lorsque vous déclarez une
const
de référence, il n'en est rien, mais une référence qui renvoie à un const objet.Le déclaratif des phrases ci-dessus comme
const
etint
est de déterminer les caractéristiques disponibles de l'objet référencé par la référence. Pour être plus clair, je veux vous montrer lapointer
équivalent d'unconst
de référence;De sorte que la ligne de code est équivalent à un
const
référence dans sa façon de travailler. En outre, il est un dernier point que je veux mentionner;Donc, quand vous faites cela, vous allez obtenir une erreur;
Cette règle a une exception. Si la référence est déclarée const, alors vous pouvez l'initialiser avec des littéraux de bien;
D'abord je pense que
int&const icr=i;
est justeint& icr = i
, Modificateur 'const' n'a pas de sens(Il signifie simplement que vous ne pouvez pas faire référence à une autre variable).Deuxième, la référence constante signifie simplement que vous ne pouvez pas modifier la valeur de la variable par l'intermédiaire de référence.
Troisième, références Constantes peuvent se lier à droite de la valeur. Le compilateur va créer une variable temporaire pour lier la référence.