Что означает прототип функции с амперсандом в нем?

Возможный дубликат:
Что означает '& ' сделать в C++?

Сегодня на моем уроке CS учитель показал нам несколько примеров функций и шаблонов, а некоторые из прототипов функций имели амперсанды в списке параметров, например:

void exchange( T & x, T & y ) ; // prototype

что это значит? Для чего мне его использовать?


person DCIndieDev    schedule 28.02.2012    source источник
comment
Если бы это было в классе, вы должны были спросить своего профессора! Никогда не бойтесь задавать вопросы.   -  person Andrew Marshall    schedule 29.02.2012
comment
Если бы вам показывали подобный прототип в классе, цель лекции, вероятно, заключалась в том, чтобы познакомить с амперсандами. Будьте внимательнее в следующий раз.   -  person Rob Kennedy    schedule 29.02.2012


Ответы (2)


& используется для справки. Короче говоря, это что-то вроде указателя, который не может быть NULL. В Википедии есть кое-что по этой теме здесь.

Ссылки дешевы, когда они используются в вызовах функций/методов, поскольку объект не нужно копировать при вызове функции. У вас по-прежнему тот же синтаксис, как если бы вы использовали скопированный объект. С указателями вам нужно будет обрабатывать особый случай, когда указатель равен NULL.

Это обычная причина их использования. Если я угадаю правильно и обмен означает что-то вроде поменять местами два объекта x и y, стоимость вызова функции напрямую связана со стоимостью обработки объекта, поэтому сохранение некоторых копий может быть соответствующей оптимизацией.

person Jörg Beyer    schedule 28.02.2012
comment
Это больше, чем указатель, который не может быть NULL, поскольку ссылка не может быть переустановлена. - person Mooing Duck; 29.02.2012

& означает «ссылка на», а x — это ссылка на T, а не копию.

person tmpearce    schedule 28.02.2012