Могут ли ссылки ссылаться на недопустимое местоположение в С++?

Опубликовано: 15 Сентября, 2022

Ссылочные переменные: вы можете создать второе имя для переменной в C++, которое вы можете использовать для чтения или редактирования исходных данных, содержащихся в этой переменной. Хотя на первый взгляд это может показаться непривлекательным, объявление ссылки и присвоение ей переменной позволяет обращаться со ссылкой, как если бы она была исходной переменной, для доступа и изменения значения исходной переменной, даже если второе имя ( ссылка) находится в другой области. Это означает, что если вы сделаете ссылки на аргументы функции, вы сможете существенно изменить данные, переданные в функцию. Это отличается от того, как обычно работает C++, в котором параметры функции копируются в новые переменные. Это также помогает сэкономить время.

В C++ ссылочные переменные безопаснее, чем указатели, потому что ссылочные переменные должны быть инициализированы, и их нельзя изменить, чтобы ссылаться на что-то еще после их инициализации. Но есть исключения, когда у нас могут быть недопустимые ссылки.

1) Ссылка на значение в неинициализированном указателе

int *ptr;
int &ref = *ptr; // Reference to value at 
                 // some random memory location

2) Возвращается ссылка на локальную переменную

int& fun()
{
int a = 10;
return a;
}

Как только функция fun() вернется, пространство, выделенное для нее в кадре стека, будет возвращено. Таким образом, ссылка на локальную переменную будет недействительной.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неверное в приведенной выше статье или хотите поделиться дополнительной информацией по теме, обсуждаемой выше.

C++