Многие могут подумать, что ссылки в C++ - это другое название указателей. Это не так, хотя их назначение и похоже, ссылки обладают рядом отличий, которые четко отделяют их от указателей. Можно сказать, что ссылки это псевдоним или второе имя объекта, передающее значение, на которое ссылаются, при ее использовании. Рассмотрим же конкретный пример.
1 2 3 4 5 |
int x, y; int &z = x; x = 100; y = 999; z = y; |
Ссылки в C++ обозначаются символом &. В данном примере в первой строке мы объявляем переменные x и y. На второй же строке идет объявление ссылки &z и присвоение ей адреса переменной x. В чем же отличия от указателей, ведь пока все идентично? Самых важных различий два – ссылка не может указывать на несуществующий объект, в то время как указатель может, и ссылку нельзя переназначить на другой адрес. Поэтому нам потребовались переменная x, чтобы создать ссылку &z. Далее, в 3 и 4 строке идет присвоение переменным x и y значений. Пятая же строка ясно показывает второе отличие ссылок от указателей. Ожидается, что просто произойдет присвоение адреса y ссылке &z, но все иначе: z в выражении сразу ссылается на присвоенный ей адрес, то есть на x, и у нас получается эквивалент выражения x = y, что означает простое присвоение значения одной переменной другой.