Я изучаю C ++ и обнаружил, что когда ссылка находится справа, может быть два случая. Предположим, у меня есть метод:
int& GetMe(int& i) { return i; }
А у меня есть:
(1) int j; GetMe(j) = GetMe(i);
и
(2) int& k = GetMe(i);
Последствия (1) и (2) различны. В (1) семантика заключается в копировании значения i
в j
. Адреса i
и j
остались прежними. Изменение i
никак не влияет на j
. На самом деле это тот случай, когда вы перегружаете оператор индекса [] и используете оператор индекса для присваивания. В (2) семантика заключается в создании референта из i
как k
. k
имеет тот же адрес, что и i
, и изменение i
влияет на k
.
Так почему у нас есть различия? Я думаю, что в C ++ адрес ссылки определяется один раз и только один раз. Как только адрес ссылки определен, он никогда не будет изменен позже В (1) ссылка на j
определяется ранее, поэтому действие заключается в копировании значения из i
в j
. В (2) ссылка k
объявляется и инициализируется, поэтому это делается с использованием ссылки i
. Таким образом, действие является инициализацией ссылки.
Я не нашел материала, явно говорящего выше, поэтому я хочу подтверждения. Любой, кто хорошо знает ссылки на C ++, должен помочь мне или указать, как очистить материал. Большое спасибо в продвинутом.