узнал про ссылки:
- Ссылка присваивается один раз как второе имя какой-нибудь переменной и больше не меняется
- Все дальнейшие операции, проводимые со ссылкой, меняют переменную, на которую она указывает
- Ссылка полезна как аргумент функции, если нужно изменить саму переменную, а не её значение
- Хорошо подходит для перегрузки операторов
Есть ещё полезности, которые я пропустил?
А если ссылка const?
Тогда инициализируем сразу и пользуемся. Поменять нельзя.
А что значит «если нужно изменить саму переменную, а не её значение»?
Значит меняем саму переменную, которую передаём в функцию, а не её копию
А чем изменение самой переменной отличается от изменения её значения? я хлебушек, простите -_-
Вообще можно ещё добавить, что ссылка не хранит информацию о типе, в отличие от указателя. У Владимирова точно было про это
А что ты подразумеваешь под "хранить информацию о типе"?
Есть Элеонора, у которой 25 яблок. Есть функция Add(int x) { x++; } - дать ещё одно. Если вызовем её так: int apples = 25; Add(apples); cout « apples; Увидим что яблок 25; _______________________ Есть Грегори, у которого 25 Элеонор. Есть функция OneMore(int &x) { x++; } Если вызовем её так: int girls = 25; OneMore(girls); cout « girls; Увидим что Грегори облюбил ещё одну; Вся разница в том что в первом случае в функцию передаём значение, во втором - ссылку. Первая функция принимает число 25, а вторая - переменную girls. 25 меняется на 26, но apples не меняется. Во втором случае girls меняется с 25 на 26, так как функция зацепила по ссылке именно эту переменную, а не просто какое-то число. Ты хлебушек, йа холубь
Я не могу сделать так: int a = 5; float &b = a;
Из ссылки не добыть информацию о типе данных, на которые она указывает. Из указателя добыть можно.
Ничего, что ссылка - это разыменованный константный указатель?
Не согласен https://en.cppreference.com/w/cpp/types/decay
Ок, я поищу тогда ту лекцию. Спасибо.
Так меняется-то значение переменной в обоих случаях. Просто в первом, где аргумент по значению приходит, создаётся локальная копия. Но это же тоже переменная, у неё адрес будет. Со своим значением, которое и меняется.
Да, дублируется локалка, выделяется дополнительная память под неё, а оригинал простаивает
Но у локалки же значение меняется, нет?
Обсуждают сегодня