Я читаю следующий вопрос Towers of Hanoi question. Первый ответ:Ссылка Проход
stack<int>&
Мой вопрос: почему это ?. Что произошло в памяти?
Я читаю следующий вопрос Towers of Hanoi question. Первый ответ:Ссылка Проход
stack<int>&
Мой вопрос: почему это ?. Что произошло в памяти?
Мы передаем ссылку, чтобы копия объекта stack
не производилась. Если копия была сделана, ее изменение не повлияет на исходный объект stack
, переданный функции. Это повлияет только на копию , которая является локальной для функции.
Ссылка похожа на псевдоним объекта; когда объявлено как
stack<int>& source
source
теперь относится к этому объекту.
Функция используется в упомянутом вопросе имел следующий прототип:
void Hanoi(int nDisks, stack<int> source, stack<int> intermed, stack<int> dest)
т.е. он принимает все передаваемые stack<int>
объектов по значению. Создается копия прошедшего stack
, и любые изменения, внесенные этому объекту в тело этой функции, изменяют копию, а не исходный объект, который был передан ей.
Именно поэтому решение состояло в том, чтобы передать эти объекты stack
по ссылке вместо передачи по значению. В основном ссылки (такие как stack<int>& dest
) позволяют рассматривать dest
внутри функции Hanoi
так же, как ее тип будет stack<int>
, там просто нет копирования и изменения видны вызывающему абоненту :)
Вы спрашиваете, что такое ссылка? Это должно быть объяснено вашей книгой на C++. –
Если вы не пройдете по ссылке, то она сделает копию контейнера, которая не предназначена для изменения фактической переменной. –
Ссылка технически - только указатель. Чтение RAII и указателей. – Paranaix