Линия
int & rodents = *pt;
создает ссылку на то, на что указывает pt
(т.е. rats
). Это не ссылка на указатель pt
.
Позже, когда вы назначите pt
для указания на bunnies
, вы не ожидаете, что ссылка rodents
изменится.
РЕДАКТИРОВАТЬ: Чтобы проиллюстрировать точку @Als, рассмотрим следующий код:
int value1 = 10;
int value2 = 20;
int& reference = value1;
cout << reference << endl; // Prints 10
reference = value2; // Doesn't do what you might think
cout << reference << endl; // Prints 20
cout << value1 << endl; // Also prints 20
Второе присваивание reference
не не меняет ссылку на себя. Вместо этого он применяет оператор присваивания (=
) к упомянутой вещи, который является value1
.
reference
всегда относится к value1
и не может быть изменено.
Поначалу немного сложно разобраться, поэтому я рекомендую вам взглянуть на превосходные книги Скотта Мейера Effective C ++ и More Effective C ++ . Он объясняет все это гораздо лучше, чем я.