Могут ли ссылки ссылаться на недопустимое местоположение в С++?
Ссылочные переменные: вы можете создать второе имя для переменной в 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() вернется, пространство, выделенное для нее в кадре стека, будет возвращено. Таким образом, ссылка на локальную переменную будет недействительной.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неверное в приведенной выше статье или хотите поделиться дополнительной информацией по теме, обсуждаемой выше.