C++ Передача по ссылке
Метод передачи параметров в функцию,Передача по ссылкекопирует адрес ссылки в формальный параметр. Внутри функции ссылка используется для доступа к фактическим аргументам, которые будут использоваться в вызове. Это означает, что изменение формального параметра влияет на фактический аргумент.
При передаче по ссылке ссылка на параметр передается в функцию так же, как и другие значения в функцию. Поэтому, соответственно, в следующей функцииswap()необходимо объявить параметры функции как ссылочные типы. Эта функция используется для обмена значениями двух целочисленных переменных, на которые указывают параметры.
// 函数定义
void swap(int &x, int &y)
{
int temp;
temp = x; /* 保存地址 x 的值 */
x = y; /* 把 y 赋值给 x */
y = temp; /* 把 x 赋值给 y */
return;
}
Теперь вызовем функцию, передавая значения по ссылкеswap():
Пример
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
交换前,a 的值: 100 交换前,b 的值: 200 交换后,a 的值: 200 交换后,b 的值: 100
Ключевые моменты
- Определение ссылки: используя
&символ для определения ссылочного типа, напримерint &ref。 - передача по ссылке: Используйте ссылочные типы в списке параметров функции, чтобы изменения внутри функции влияли на фактические переданные переменные.
- Избегание накладных расходов на копирование: Передача по ссылке позволяет избежать накладных расходов на копирование при передаче больших объектов, повышая эффективность.
Сценарии применения вызова по ссылке
- Изменение внешних переменных: Как показано в примере выше, изменяйте переданные переменные через функцию.
- сокращение накладных расходов: Особенно при передаче больших объектов или сложных структур данных передача по ссылке позволяет избежать ненужных операций копирования.
- Оптимизация возвращаемого значения: Возврат локальной переменной функции по ссылке позволяет избежать накладных расходов на копирование возвращаемого значения.
Вызов по ссылке — важная техника в C++, которая может повысить эффективность и гибкость кода. Понимание и освоение вызова по ссылке очень помогает при написании эффективных программ на C++.
Другие расширения