/ / Co jest stałym odniesieniem? (nie odwołanie do stałej) - c ++, reference, constants, const

Co to jest stałe odniesienie? (nie odniesienie do stałej) - c ++, referencja, stałe, const

Dość teoretyczne pytanie ...Dlaczego stałe odwołania nie zachowują się tak samo jak stałe wskaźniki i mogę faktycznie zmienić obiekt, na który wskazują? Oni naprawdę wydają się kolejną deklaracją zmiennej. Dlaczego miałbym ich używać? Jest to krótki przykład, który uruchamiam i kompiluje bez błędów:

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;
}

Odpowiedzi:

61 dla odpowiedzi № 1

Najjaśniejsza odpowiedź. Czy „X & const x” ma sens?

Nie, to nonsens

Aby dowiedzieć się, co oznacza powyższa deklaracja,przeczytaj to od prawej do lewej: „X jest stałym odniesieniem do X”. Ale to jest zbędne - odniesienia są zawsze stałe, w tym sensie, że nigdy nie można ponownie umieścić odniesienia aby odnieść się do innego obiektu. Nigdy. Z lub bez const.

Innymi słowy, „X i const x” jest funkcjonalnieodpowiednik „X & x”. Ponieważ nic nie zyskujesz, dodając stałą po &, ty nie powinno go dodawać: będzie mylić ludzi - const zrobi trochę ludzie myślą, że X jest stałe, jakbyś powiedział „const X & x”.


43 dla odpowiedzi nr 2

Twierdzenie icr=y; nie odnosi się do odniesienia y; przypisuje wartość y do zmiennej, która icr odnosi się do, i.

Referencje są z natury rzeczy const, to znaczy „nie możesz zmienić tego, do czego się odnoszą.const odniesienia „które są naprawdę” odniesienia do const„, czyli nie możesz zmienić wartości obiektu, do którego się odnoszą. Są zadeklarowane const int& lub int const& zamiast int& const chociaż.


23 dla odpowiedzi nr 3

Co to jest stałe odniesienie (nie odniesienie do stałej)
ZA Stałe odniesienie w rzeczywistości jest Odniesienie do stałej.

Stałe odniesienie / odniesienie do stałej jest oznaczane przez:

int const &i = j; //or Alternatively
const int &i = j;
i = 1;            //Compilation Error

Oznacza to zasadniczo, że nie można modyfikować wartości obiektu typu, do którego odwołuje się odwołanie.
Na przykład:
Próbuję zmodyfikować wartość (przypisz 1) zmiennej j poprzez referencję stałą, i spowoduje błąd:

przypisanie odniesienia tylko do odczytu „i”


icr=y;          // Can change the object it is pointing to so it"s not like a const pointer...
icr=99;

Czy to nie zmienia odniesienia przydziela wartość typu, do którego odnosi się odniesienie. Odwołania nie mogą odnosić się do żadnej innej zmiennej niż ta, do której są zobowiązani podczas inicjalizacji.

Pierwsze oświadczenie przydziela wartość y do i
Drugie stwierdzenie przydziela wartość 99 do i


3 dla odpowiedzi № 4

Przez „stałe odniesienie” naprawdę zgadujęoznacza „odniesienie do stałych danych”. Wskaźniki z drugiej strony mogą być stałym wskaźnikiem (sam wskaźnik jest stały, a nie danymi, na które wskazuje), wskaźnikiem do stałych danych lub obydwoma.