C ++ pentru începători
3.6. Tip de referință
Dacă nu am specificat calificatorul const, toate cele trei referințe ar provoca o eroare de compilare. Cu toate acestea, motivul pentru care compilatorul nu rata aceste definiții este neclar. Să încercăm să înțelegem.
Pentru literali, aceasta este mai mult sau mai puțin ușor de înțeles: nu ar trebui să putem schimba indirect valoarea literalului folosind indicii sau referințe. În ceea ce privește obiectele de un alt tip, compilatorul convertește obiectul sursă la unul auxiliar. De exemplu, dacă scriem:
atunci compilatorul îl va converti astfel:
Încercarea de a corecta cazul adăugând calificatorul const nu trece:
Care este motivul? Dacă citim cu atenție definiția, vom vedea că pi_ref este o referință la un pointer constant la un obiect de tip int. Și avem nevoie de un pointer neconstant la un obiect constant, deci următoarea intrare va fi corectă:
vom inițializa pointerul pi cu o valoare nulă, ceea ce înseamnă că pi nu indică nici un obiect. În același timp, înregistrarea
const int ri = 0;
înseamnă următoarele:
int temp = 0;
const int ri = temp;
În ceea ce privește operația de atribuire, în următorul exemplu:
Cum se referă obiectele de referință independente și referințele parametrilor? Dacă scriem:
aceasta este echivalentă cu următoarea definiție a unei referințe în cadrul unei funcții:
(Consultați Capitolul 7 pentru mai multe detalii despre utilizarea referințelor ca parametri formali ai funcțiilor.)
Exercitarea 3.19
Există vreo eroare în aceste definiții? Explică. Cum le-ai rezolva?
Exercitarea 3.20
Dacă între următoarele operațiuni de atribuire sunt eronate (utilizați definițiile din exercițiul anterior)?