Ссылки vs указатели - в чем разница?21.11.2015, 20:04. Показов 17079. Ответов 150
Метки нет (Все метки)
Навеяно соседней темой. Не понимаю в чем разница, хотя несколько раз честно пробовал почитать на эту тему, правда без должного внимания и усердия. Зато программировал на ассемблере и чистом С, понимаю абстракцию "адрес ячейки памяти" и "размер типа в байтах", с арифметикой указателей и указателями на указатели сложностей вроде не испытываю
Есть переменная, если она не регистровая - то лежит в какой-то ячейке памяти (или нескольких, зависит от разрядности памяти и структуры типа переменной), адрес этой ячейки (ака указатель) я могу запоминать в другую переменную типа указателя, передавать/возвращать ее из функций, инкрементировать/декрементировать для движения по массиву переменных (если я его предварительно нарезал в той области памяти конечно), разыменовывать и получать/изменять значение. Вроде все. При чем тут термин "ссылки"? А еще оказывается бывают смартпоинтеры, умные указатели и прочие страшные слова
0
|
|
| 21.11.2015, 20:04 | |
|
Ответы с готовыми решениями:
150
в чем разница? массивы и указатели строк |
|
Комп_Оратор)
|
||||
| 30.11.2015, 15:56 | ||||
![]() Добавлено через 14 минут DrOffset, ![]() ![]() Действительно досочинялся... Сам запутался! ![]() Константный указатель и ссылка по поведению в данном контексте равны и я написал в том месте чушь. Прошу модераторов убрать:
отличие инициализации ссылок и указателей есть, но если сравнивать с константным, то нет.
1
|
||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||
| 30.11.2015, 16:02 | ||||
|
Так как в коде написан имено КОНСТАНТНЫЙ УКАЗАТЕЛЬ, а не указатель на константу. Вот слова:
Цитировал как есть. Добавлено через 51 секунду Я уже думать начал, что надо мной издеваются
1
|
||||
|
Комп_Оратор)
|
||
| 30.11.2015, 16:04 | ||
![]() там комент про заранее созданную константу и это должна то была идти речь о сравнении константной ссылки и указателя на константу а не константного указателя! Короче, сам попался там, где хотел газету расстелить. Может так ещё понятней будет?
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 03.12.2015, 00:24 | |||
|
вижал студия сделает предупреждение, что квалификатор пошел лесом. другие компили могут просто послать. например, гцц Добавлено через 6 минут здесь - ub
0
|
|||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|||||||
| 03.12.2015, 00:26 | |||||||
|
В Microsoft Visual Studio существует много чего существовать не должно. Там, например, такой квалификатор существует и он пропускается как устаревший. Т.е. он на мгновение есть во время компиляции. Но студия ему делает "аборт".
такой код в студии валиден, но квалификатор как раз лишний, во время выполнения программы его не будет.
0
|
|||||||
|
Комп_Оратор)
|
|||||||||||||
| 03.12.2015, 01:34 | |||||||||||||
0
|
|||||||||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 03.12.2015, 08:44 | ||
|
Однако, если программист думал, что это не повредит и писал таким образом код. А потом через 3 года проект решили перенести на другую платформу, где компилятор не допускает таких вольностей, то проблему это определенно создаст.
1
|
||
|
Комп_Оратор)
|
|||||||
| 03.12.2015, 11:41 | |||||||
|
Я пытался как раз и сказать о различии константности ссылок как таковой и поведения ссылок на константу. О путанице и о том, что запись для ссылки-константы (настоящей константной ссылки) не имеет смысла так как они и так константы. Мой компилятор допускает такую запись. Что касается переносимости, то люди которые пишут кроссплатформенно, обычно имеют значительно более высокий уровень, чем тот что требуется для понимания пагубности записи:
0
|
|||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 03.12.2015, 11:55 | |
|
IGPIGP, я объяснил почему плохо. когда компилятор пропускает нестандартные конструкции.
Вы, допустим, не предлагали так писать, но и не утверждали обратного. Я вот утверждаю обратное, безотносительно ваших слов. Просто потому, что это опасно. Это форум, вы высказали мнение, что ничего страшного нет, если компилятор это поддерживает, а я говорю, что страшное есть, т.к. всегда есть такая вещь, как человеческий фактор. Пусть тот, кто это потом прочитает, сам делает выводы из сказанного. Про человеческий фактор: Был реальный пример, когда человек насмотрелся на код стандартной библиотеки и писал имена параметров функций начиная с двух подчеркиваний. Ну вот стиль такой, говорил он. Вроде бы ничего страшного, да вот только стандарт запрещает такое использование в пользовательском коде, т.к. имена с подчеркиваний зарезервированы для внутренних нужд. И вот в один прекрасный момент, при переносе его кода на другой компилятор все развалилось, т.к. среди имен, которые он таким образом давал, оказалось пара ключевых слов из состава расширений компилятора.
0
|
|
|
Комп_Оратор)
|
||||||||
| 03.12.2015, 18:22 | ||||||||
|
Давайте так: Вы правы. Точка. Добавлено через 6 часов 7 минут Ещё хочу вспомнить, что параметр объявленный как константная ссылка кроме подсказки компилятору о возможности оптимизации, кроме получения возможности передачи константы и строкового литерала, в частности, позволяет ещё строго выдержать контракт "конструктор не возвращает значений". В случае конструктора преобразования константная ссылка защищает передаваемый параметр от модификации. В то же время такая возможность существует (на правах хака)). ![]()
0
|
||||||||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
||
| 03.12.2015, 19:16 | ||
|
1
|
||
|
Комп_Оратор)
|
||||||||||||
| 03.12.2015, 20:54 | ||||||||||||
|
1) легче; 2) по барабану; 3) тяжелее. По идее если компилятор не умеет отслеживать:
![]() Как бы не было, а мне было бы легче.
0
|
||||||||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 03.12.2015, 21:43 | |||
|
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 03.12.2015, 21:55 | ||
|
квалификаторы нужны людям, а не компилятору. у ссылок их не существует в принципе, потому что она - псевдоним оригинального объекта, и не обладает идентичностью (у неё нет собственных объектов, которые могли бы хранить состояние ссылки) будет ошибкой полагать, что ссылка - это "указатель с авторазыменовыванием". и наделять ссылку свойствами, присущими указателям.
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||||
| 03.12.2015, 21:57 | ||||||
|
IGPIGP, Собственно вот ассемблер твоего примера, я только заменил cout на puts, чтобы получить более читаемый листинг.
Объясняется это просто - после трансляции программы во внутреннее представление, алгоритмы оптимизации в компиляторе смогут крутить ее как бог черепаху. В частности, они вполне способны распознать где у нас константа, а где нет.
1
|
||||||
|
Комп_Оратор)
|
|||||||||
| 03.12.2015, 22:01 | |||||||||
![]() И какова логическая сложность вызова, на которой конкретный компилятор сдастся? ![]() Вообще из примера о параметре в методе (конструкторе тем более, где по возможности не стоит модифицировать внешние переменные побочно) интерес вызвали лишь сомнения в том, что const не облегчает жизнь компилятору. Из вступительной фразы. Жаль. ![]() Добавлено через 2 минуты
0
|
|||||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 03.12.2015, 22:09 | |||
|
Потенциально, если контекст выводим, то сложность может быть очень большой.
1
|
|||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 03.12.2015, 22:18 | ||
|
0
|
||
|
|
|||
| 03.12.2015, 22:40 | |||
|
1
|
|||
| 03.12.2015, 22:40 | |
|
Указатели и ссылки [С++]
Ссылки и указатели Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
|
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
|
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения.
https:/ / habr. com/ ru/ sandbox/ 295048/
начало и оглавление
-
Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
|
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
|
|
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
|
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
|
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0)
Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона
Уважаемые коллеги!
В продолжение. . .
|
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии
Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
|