Référence constante sur référence
Une petite note sur les références et le qualificatif const
en commençant par un exemple :).
using reference = int&;
int i = 0;
reference const r = i;
r = 3;
Contrairement à ce que laisse croire le code, il est possible de modifier la valeur de r
.
En fait, ajouter const
sur une référence ne fait rien car cela ne s’applique pas sur le référé qui reste un int&
.
Si on déroule complètement le type de r
, on obtient int & const r
: une référence constante sur un entier.
Comme une référence est par nature immutable (le référé ne peut pas changer), le const
est superflux.
Le type de r
est donc bien une référence sur un entier non-constant.
(On notera toutefois que la syntaxe int & const
est invalide puisque const
ne peut s’appliquer directement sur une référence.)