Ссылки vs указатели - в чем разница?21.11.2015, 20:04. Показов 17086. Ответов 150
Метки нет (Все метки)
Навеяно соседней темой. Не понимаю в чем разница, хотя несколько раз честно пробовал почитать на эту тему, правда без должного внимания и усердия. Зато программировал на ассемблере и чистом С, понимаю абстракцию "адрес ячейки памяти" и "размер типа в байтах", с арифметикой указателей и указателями на указатели сложностей вроде не испытываю
Есть переменная, если она не регистровая - то лежит в какой-то ячейке памяти (или нескольких, зависит от разрядности памяти и структуры типа переменной), адрес этой ячейки (ака указатель) я могу запоминать в другую переменную типа указателя, передавать/возвращать ее из функций, инкрементировать/декрементировать для движения по массиву переменных (если я его предварительно нарезал в той области памяти конечно), разыменовывать и получать/изменять значение. Вроде все. При чем тут термин "ссылки"? А еще оказывается бывают смартпоинтеры, умные указатели и прочие страшные слова
0
|
|
| 21.11.2015, 20:04 | |
|
Ответы с готовыми решениями:
150
в чем разница? массивы и указатели строк |
| 26.11.2015, 17:50 | |
|
0
|
|
|
-5 / 14 / 2
Регистрация: 16.03.2014
Сообщений: 78
|
|
| 27.11.2015, 22:08 | |
|
gru74ik, о всеведующий гуру, расскажи как rvalue превращается в lvalue на доступном языке ( можешь применять слова magic и happend).
Reference - wtf? ты в гугль транслейте нашел один из вариантов "ссылка"?! )))
0
|
|
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 28.11.2015, 17:11 | |
|
Честно говоря мало похоже, что ТС не знает в чем отличия указателей и ссылок. Вся эта тема сильно на троллинг похожа.
Если эта тема не троллинг, то вот тут стараются ему объяснить, ссылки дают. Зачем??? Объясните Вы это ему на его любимом Китайском, в чем различие. Как он любит. (А он тут помогает начинающим, активно практикуя стиль байхуа С++ ) Он не глупый, он поймет Ваш Китайский намного быстрее чем наш примитивный.
0
|
|
| 28.11.2015, 17:18 [ТС] | |
|
daslex, зачем кипятишься, дарагой?
Я благодарен всем ответившим по делу (даже одновременно тем, кто был не согласен друг с другом), плюсов не ставил потому что тогда надо было бы почти каждый ответ плюсовать. Я читаю данные мне ссылки, перехожу с них на другие темы, и т.д. Но вопрос для меня непростой, пытаюсь понять.ЗЫ и я не капризничаю и не флужу в ваших соседних темах по вопросам буквально точно такого же содержания.
0
|
|
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||||||
| 28.11.2015, 17:38 | ||||||
|
Личный мой примитивный язык о ссылках: "
1. Реализация ссылок зависит от компиляторов. 2. Важна идея, а не суть ссылок (ибо реализации различны). 3. Сокращение кода, придание более удобного обращения. 4. Появились некоторые побочные эффекты. Часть из них полезна.
" Добавлено через 8 минут Присвоение ссылок основано на глубоком копировании (новое значение присваивается объекту, на который указывает ссылка); присвоение указателей не использует глубокое копирование. Отсюда - конструктор копирования.
0
|
||||||
| 28.11.2015, 17:42 [ТС] | |
|
Вот именно это я и читаю у других ответивших: mporro, декларирующего первенство абстракции, Evg - первенство реализации, и Mr.X, отсылающего к Страуструпу и его мнению о красоте и ее роли в мире. И держу в памяти пласты, затронутые Nosey, IGPIGP, hoggy и другими. И по-моему, это далеко не самая бесполезная тема в этом забытом б-гом разделе
0
|
|
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 28.11.2015, 17:50 | |
|
Evg писал не о первенстве реализации, а о том, что чтобы писать эффективно, надо понимать архитектуру систем. Это было спровоцировано выссказыванием о быстродействии.
Слишком много компиляторов, чтобы вдаваться в реализацию ссылки в каждом из них. А в купе с архитектурами ОС, получается достаточно большая база для изучения. Может быть не на один год, даже. Абстрация - прекрасно, но рано или поздно приходится ее нарушать. Тру кодеры постоянно лезут в открытые листинги, чтобы повысить уровень знаний. Хорошие водители автомобилей постоянно лезут в мотор для ремонта его или его совершенстования и т.д. Это участь творцов - нарушение абстракций, а участь потребителей - не лезть куда не надо.
0
|
|
| 28.11.2015, 17:56 [ТС] | |
|
Полагаю, меня на первом этапе вполне устроит участь потребителя. И всего-то надо было понять, что:
1) ссылки - это некая языковая абстракция 2) семантику этой абстракции А про реализацию и творцов предлагаю даже не начинать холивар. Ибо тогда тема будет уже в первой тройке Гугла Ибо участь творцов - комбинировать абстракции, а участь сервиса - реализовывать их.
0
|
|
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 28.11.2015, 18:01 | |
|
0
|
|
|
Комп_Оратор)
|
|||||||
| 28.11.2015, 22:33 | |||||||
![]() Вообще и указатель на константу и ссылку на константу обмануть несложно. Со ссылкой правда это, опять таки выглядит шиворот-на-праворот)
Человек "из С не плюс-плюс" может не знать перегрузок операторов присваивания, но он знает операторы ++. Хотя он и не ++! Но внутренняя реализация инкремента предполагает реализацию ссылки. Хотя ссылка как тип и не реализуется, но как объект она, не просто, здорово украшает жизнь, она - часть этой жизни.
0
|
|||||||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 28.11.2015, 22:36 | |
|
IGPIGP, не везде скомпилируется.
0
|
|
|
Комп_Оратор)
|
||
| 28.11.2015, 22:54 | ||
![]() Но ссылка не поддерживает адресной арифметики и не может быть перенаправлена присваиванием и это значит, что максимум чем рискуем - испортить объект. Это легко отловить кстати. А вот указатель, это зверь забавный. Мало того, что никто не знает (и он сам тоже) куда он показывает, но никто никогда не узнает куда он может показать в следующий момент! Хоорошо если в защищенные области. Сразу крэш и можно искать. А если тихо всё? И главное работает без ошибок? Это и есть набор взаимно противодействующих глюков. То есть отлаженная версия 1.1. Всё это шутки конечно.
0
|
||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|||||||
| 28.11.2015, 23:28 | |||||||
|
Не по теме:
Просто кое кто из разработчиков халтурит. А кто халтурит можно видеть подобными "хаками". Прикольно, интересно, но именно этот случай - это очевидный косяк разработчиков. Не доглядели. Добавлено через 18 минут Да и насчет жесткой привязки спорный вопрос. Маленький эксперимент показывает неоднозначность поведения.
0
|
|||||||
|
Комп_Оратор)
|
|||
| 29.11.2015, 00:55 | |||
|
daslex, всё верно. Но это тоже самое но другими словами. Просто говорить о математике свободным языком сложно. Вот например:
![]() Что касается поведения ссылки на константу, то оптимизация приводит к передаче значения. Нет же смысла передавать адрес по которому не будет записи. Если передаётся что-то мелкое то его легче же по значению и передать. То есть не привязанную сущность, а совершенно отвязанное значение. ![]() Относительно недоработки разработчиков, это тоже вопрос спорный. Почему, указатель на константу можно скастить к простому, а ссылку нельзя? Дискриминация ссылок по константному признаку. У них там на Западе это опасно. То есть может привести к снижению популярности.
1
|
|||
|
Модератор
|
||||
| 29.11.2015, 12:14 | ||||
|
Ты утверждал: С твоей стороны пока ничего внятного не услышал.
3
|
||||
|
Комп_Оратор)
|
|||||||||||||||||||||||||||||||||||||||||
| 30.11.2015, 12:20 | |||||||||||||||||||||||||||||||||||||||||
|
После модерирования пропали некоторые вещи по теме. В удалённых постах был затронут вопрос актуальности темы "ссылки и указатели" как вообще, так и в аспекте количества просмотров данного топика. Было сказано в частности, что в Google по запросу: "ссылки и указатели в чём разница" можно на первой же странице увидеть обсуждение на нашем форуме, где много славных имён и хороших мыслей. В частности:
Ссылки и указатели сегодня, если дать запрос вот так: "Ссылки vs указатели - в чем разница" на первой странице уже будет данная тема. ![]() Именно потому, что информация пропала её и хочется восстановить. Это касается константности указателей и ссылок. Тут часто много путаницы бывает. С указателем всё более-менее ясно. Можно объявить указатель на константу:
Можно также объявить константный указатель:
Для сравнения с указателем ссылку опишу в том же порядке: Ссылка на константу (называют константной ссылкой почему - позже )
и константная(!) ссылка может тоже быть объявлена
Это сделано для синтаксического равноправия, хотя смысла не имеет, так как любая ссылка константна по своей природе. Нельзя перенаправить ссылку. Она связывается с объектом в момент объявления (инициализируется) и не может быть переприсвоена в дальнейшем. Любые попытки присвоения приводят к присвоению значения по ссылке. Именно поэтому, понимая константность ссылки её никто константной не объявляет. Именно поэтому ссылку на константу называют константной ссылкой. Я не уверен, не является ли такое положение дел чисто русской локализацией. Традиции неверного перевода и т.п. Буду благодарен если кто ни будь уточнит. Не удивлюсь если на английском такая же история. Хух... Итак есть два важных момента в понимании ссылок связанных с константностью. Первое, это "контракт" ссылки. Как бы не была реализована ссылка, она ведёт себя как константный авторазыменовывающийся указатель. Это как уже указывалось, есть здесь: Ссылки и указатели Второй аспект константности связан с ссылками на константу то есть того что мы называем "константными ссылками" (для облегчения прононса)). Константная ссылка в отличие от указателя должна быть инициализирована сразу. Поэтому когда формальный параметр объявлен ссылкой на константу (повторяю ссылка на константу и константная ссылка "в быту" это одно и то же), то компилятор, обычно может найти значение на стадии компиляции. Если константа не внешняя (хитро спрятанная)) например. В этом случае если код функции и логика её вызова позволяют, может вообще не произойти никакого вызова. Функция будет скомпилирована инлайн! Ни о каком объекте там уже и речи нет. В крайнем случае может быть передано значение если константа не велика по размеру. Даже в качестве регистровой переменной. То есть объявив в простенькой функции ссылку на константу можно надеяться на такую оптимизация. Так я понял мысли Evg о константных ссылках. Мне они нравятся. Знание некоторых вещей под капотом, это полезная штука. Сразу прошу прощения за ошибки. Трудно такой большой текст написать идеально.
1
|
|||||||||||||||||||||||||||||||||||||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||
| 30.11.2015, 12:37 | ||||
|
Константа всегда должна быть инициализирована. (1)
3
|
||||
|
Комп_Оратор)
|
||||
| 30.11.2015, 14:08 | ||||
|
Я далеко не гуру. Я скорее новичок но хочется знать, Тут есть огрехи по сути изложенного в целом? - Я специально оговорил 1000500 раз что константная ссылка это ссылка на константу (в быту). Могу привести примеры в литературе. Хотя все с этим сталкивались. Константную ссылку нельзя установить на переменную с неопределенным значением. Потому что она устанавливается на константу и как Вы правильно заметили: DrOffset, я всегда считал Вас настоящим профи. И в сё же, Вы считаете не стоило выкладывать текст с попыткой разделения внутренней константности ссылок и нюансов поведения ссылок на константу?
0
|
||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||||||||
| 30.11.2015, 14:28 | |||||||||||
|
Просто акцент на том, что константный указатель можно не инициализировать "сразу" в отличие от ссылки - неверен. В этом они равноправны абсолютно, как и любая другая константная сущность в С++. Константность преподлагает наличие начального значения. Поэтому я и сказал, что во фразе
![]() Мои замечания по сути касались характеристики константных указателей (НЕ указателей на константу), которая была дана в качестве сравнения со ссылками. Не более того. Добавлено через 2 минуты Текст хороший, просто неточный в деталях. Надеюсь теперь я буду понят верно ![]() Добавлено через 6 минут По крайней мере должно быть указано, что это незаконно. Просто VS не придерживается правил.
2
|
|||||||||||
|
|
||
| 30.11.2015, 14:28 | ||
|
1
|
||
| 30.11.2015, 14:28 | |
|
Указатели и ссылки [С++]
Ссылки и указатели Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики
1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
|
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928
Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
|
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего
Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
|
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы
Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
|
|
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока
Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
|
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
|
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат»
Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
|
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
|