Ссылки в C++: ключевые концепции и отличия от указателей
Ссылочная переменная — это псевдоним, то есть другое имя для уже существующей переменной. После инициализации ссылки переменной, можно использовать либо имя переменной, либо имя ссылки для обращения к переменной.
Ссылки против указателей
Ссылки часто путают с указателями, но есть три главных отличия:
Нельзя иметь NULL-ссылки. Всегда можно предполагать, что ссылка связана с легатимной областью памяти.
После инициализации ссылки объектом, её нельзя изменить так, чтобы она ссылалась на другой объект. Указатели могут указывать на другой объект в любой момент.
Ссылка должна быть инициализирована при создании. Указатели можно инициализировать в любой момент.
Создание ссылок в C++
Представьте имя переменной как ярлык, приклеенный к её местоположению в памяти. Ссылку можно представить как второй ярлык на то же место. Поэтому можно обращаться к содержимому переменной либо через исходное имя, либо через ссылку. Например:
int i = 17;
Можно объявить ссылочные переменные для i так:
int& r = i;
Читайте & в таких объявлениях как ссылка. То есть первое объявление читается как «r — это целочисленная ссылка, инициализированная i». Второй — «s — это ссылка на double, инициализированная d». Пример использования ссылок на int и double:
#include <iostream>
using namespace std;
int main() {
// простые переменные
int i;
double d;
// ссылочные переменные
int& r = i;
double& s = d;
i = 5;
cout << "Value of i : " << i << endl;
cout << "Value of i reference : " << r << endl;
d = 11.7;
cout << "Value of d : " << d << endl;
cout << "Value of d reference : " << s << endl;
return 0;
}
Результат компиляции и выполнения:
Value of i : 5 Value of i reference : 5 Value of d : 11.7 Value of d reference : 11.7
Ссылки обычно используются для списков аргументов функций и возвращаемых значений. Поэтому два важных аспекта, связанных со ссылками в C++, должны быть понятны программисту:
| № | Концепция и описание |
|---|---|
| 1 | Ссылки как параметры — C++ поддерживает передачу ссылок как параметров функции безопаснее, чем параметров. |
| 2 | Ссылка как возвращаемое значение — можно вернуть ссылку из функции C++ как любой другой тип данных. |
Язык C
- Понимание типов данных C++: основы, модификаторы и лучшие практики
- Освоение операторов C++: полное руководство с практическими примерами
- Комментарии в C++: лучшие практики для читаемого и поддерживаемого кода
- Понимание конструкторов в C++: конструкторы по умолчанию, параметризованные и копирования
- Шаблоны классов в C++: практическое руководство
- Язык программирования C++: обзор и ключевые особенности
- Константы и литералы в C++: типы, синтаксис и лучшие практики
- Полное руководство по операторам C++: типы, использование и лучшие практики
- Работа с числовыми типами в C++: практическое руководство
- Ссылки в C++: ключевые концепции и отличия от указателей