Многопользовательские игры. Разработка сетевых приложений [Джошуа Глейзер] (pdf) читать постранично, страница - 117
Книга в формате pdf! Изображения и текст могут не отображаться!
[Настройки текста] [Cбросить фильтры]
оригинальная переменная. Чаще всего ссылки используются при определении
функций, которые изменяют свои параметры. Например, следующая функция
меняет значения параметров a и b местами:
void swap(int& a, int& b)
{
int temp = a;
a = b;
b = temp;
}
То есть если функции swap передать две целочисленные переменные, по завершении ее работы эти две переменные поменяются значениями. Это происходит
благодаря тому, что параметры a и b представляют собой ссылки на оригинальные
переменные. Если бы функцию swap потребовалось написать на C, пришлось бы
вместо ссылок использовать указатели. На уровне компиляции ссылки фактически
реализованы как указатели, но семантика использования ссылок намного проще,
потому что их разыменование происходит неявно. Кроме того, ссылки безопаснее
использовать в параметрах функций, потому что они гарантированно не могут
быть пустыми (хотя теоретически ничто не помешает написать уродливый код,
в котором ссылка будет пустой).
Константные ссылки
Возможность изменения параметров — лишь одна из множества причин использования ссылок. Для сложных типов (таких, как классы и структуры) передача по
ссылке почти всегда оказывается эффективнее передачи по значению. Это обу
словлено необходимостью создания копии переменной при передаче по значению,
а для сложных типов, таких как вектор или строка, создание копии требует динамического выделения памяти, что значительно увеличивает накладные расходы.
354 Приложение • Современный С++
С другой стороны, если вектор или строка просто передаются в функцию по ссылке,
это означает, что функция сможет изменить значение оригинальной переменной.
А как быть, когда такая возможность должна быть запрещена, например когда
переменная представляет данные класса? Решение этой проблемы заключается
в использовании константных ссылок (const reference). Константная ссылка подобна обычной, но ее можно использовать только для чтения — любые изменения
запрещены. В результате получается соединение лучшего с хорошим: отпадает необходимость создания копии, и функция не сможет изменить данные. Следующая
функция print является одним из примеров передачи параметров по константной
ссылке:
void print(const std::string& toPrint)
{
std::cout
Последние комментарии
17 часов 36 минут назад
1 день 3 часов назад
1 день 16 часов назад
1 день 23 часов назад
2 дней 44 минут назад
2 дней 1 час назад