Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/75: Рейтинг темы: голосов - 75, средняя оценка - 4.55
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
1

Ссылки vs указатели - в чем разница?

21.11.2015, 20:04. Показов 13478. Ответов 150
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Навеяно соседней темой. Не понимаю в чем разница, хотя несколько раз честно пробовал почитать на эту тему, правда без должного внимания и усердия. Зато программировал на ассемблере и чистом С, понимаю абстракцию "адрес ячейки памяти" и "размер типа в байтах", с арифметикой указателей и указателями на указатели сложностей вроде не испытываю Есть переменная, если она не регистровая - то лежит в какой-то ячейке памяти (или нескольких, зависит от разрядности памяти и структуры типа переменной), адрес этой ячейки (ака указатель) я могу запоминать в другую переменную типа указателя, передавать/возвращать ее из функций, инкрементировать/декрементировать для движения по массиву переменных (если я его предварительно нарезал в той области памяти конечно), разыменовывать и получать/изменять значение. Вроде все. При чем тут термин "ссылки"? А еще оказывается бывают смартпоинтеры, умные указатели и прочие страшные слова
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.11.2015, 20:04
Ответы с готовыми решениями:

Указатели и ссылки: в чем разница
Здравствуйте, объясните, пожалуйста, в чем разница между "ссылается" и "указывает"?

Указатели и ссылки: в чём их разница и сходство?
Я начал учить с++ и не могу кое в чём разобраться. Кто знает ответы на эти вопросы может ответить...

в чем разница? массивы и указатели строк
В примере Дейтла ( в документе ) массивы строк инициализируются через указатели, при этом...

Ссылки и указатели - в чем преимущество одного над другим
Известно, что главной причиной появления ссылок в С++ было дать более безопасную альтернативу...

150
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
03.12.2015, 22:45 141
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от DrOffset Посмотреть сообщение
такое вполне может
Цитата Сообщение от DrOffset Посмотреть сообщение
Как правило
я же и говорю, - не обязан. И опять не придумал, - пишут везде. Потому и решил, что const повышает шансы/снижает вычислительную нагрузку, то есть помогает. И так и написал - "подсказка". Слово inline это же тоже подсказка/рекомендация. Не понимаю в чём спор.
Как-то всё сводится к тому у кого компилятор толще.
Так я везде и пишу, что не профи программист.
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
03.12.2015, 23:05 142
Цитата Сообщение от IGPIGP Посмотреть сообщение
Потому и решил, что const повышает шансы/снижает вычислительную нагрузку, то есть помогает
Для компилятора const нужен в случаях типа:

C++
 // тела обеих функций для компилятора не видны
extern void foo (const int&);
extern void bar (int&);
 
int x, y;
 
void func (void)
{
  int a = 0;
  foo (a);
  x = a;
  bar (a);
  y = a;
}
Глядя на такой код компилятор вполне мог бы понять, что "x = 0", т.к. вызов функции foo значение переменной "a" не меняет. Но про значение "y" уже ничего сказать нельзя, т.к. bar может и поменять значение "a". Но по факту g++ эту оптимизацию не делает. Возможно из-за того, что слишком много в мире софта, где программисты делают всякие сопли с преобразованием указателей/ссылок (чтобы снять признак const) и всё равно модифицируют параметры. Вполне возможно, что есть опция со смыслом "доверять квалифиактору const", которая по умолчанию выключена

Цитата Сообщение от IGPIGP Посмотреть сообщение
Слово inline это же тоже подсказка/рекомендация
В Си++ это намного больше, чем подсказка/рекомендация - https://www.cyberforum.ru/blogs/18334/blog93.html
3
DrOffset
03.12.2015, 23:16
  #143

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Не понимаю в чём спор.
Спор? Ни в коем случае. Тебе показалось :)

0
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
03.12.2015, 23:24 144
Цитата Сообщение от Evg Посмотреть сообщение
В Си++ это намного больше, чем подсказка/рекомендация
Спасибо, с интересом прочёл. Однако в контексте разговора и так ушедшего от ссылок я имел виду, что ничего там не гарантировано и логично полагать что const помогает.
Ну давайте скажем, что не const ни inline не помогают. Я не берусь их сравнивать, - боже упаси. Тема и так ушла в туман.

Добавлено через 4 минуты

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
Спор? Ни в коем случае. Тебе показалось
Согласие есть продукт при /*полном*//* хотя бы частичном*/ непротивлении сторон. Классика):pardon:
С точки зрения матлогики остальное - несогласие/спор. :)
Рад был пообщаться.:friends:

0
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
03.12.2015, 23:29 145
Цитата Сообщение от IGPIGP Посмотреть сообщение
Ну давайте скажем, что не const ни inline не помогают.
Мы можем сказать, что зависит от реализации.
Однако, как правило, программисты не работают на бесконечном множестве реализаций. У меня вот используются 4 аппаратные платформы и 3 ОС. Также 3 разных компилятора. Их способности к оптимизации на этих платформах известны, поэтому можно делать прогнозы.

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
С точки зрения матлогики остальное - несогласие/спор.
Разве я писал, что не согласен. Я просто ответил на твои вопросы в посте. Ну пусть там не было знаков вопроса, но ты же сказал, что не уверен. Вот я и уточнил :)
Никакого спора, правда :)

0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
03.12.2015, 23:37 146
Цитата Сообщение от IGPIGP Посмотреть сообщение
Однако в контексте разговора и так ушедшего от ссылок я имел виду, что ничего там не гарантировано и логично полагать что const помогает
Чтобы не ломать язык об терминологию сразу скажу, что везде про const имеются в виду "const int *p" и "const int &p"

const на параметрах-указателях по замыслу разработчиков языка должен был помогать оптимизациям ещё в Си. И на моей памяти я когда-то работал с каким-то компилятором, который это учитывал. Но реальная жизнь оказалась такова, что очень много разработчиков попросту не умеют программировать и с const-указателями работают неправильно. Пока компиляторы были слабые, они далеко в оптимизации не закапывались и эти ошибки никак не проявлялись. Но потом компиляторы стали умнее, а софт остался старый и с ним было много проблем именно из-за старых ошибок. Вполне возможно, что нежелание современных компиляторов учитывать const-указатели в параметрах (проверял на gcc, clang, suncc) обусловлено именно этим.

const-ссылка с точки зрения внутреннего устройства компилятора является прямым наследником const-указателей. И если бы компиляторы нормально работали с const-указателями, то всё бы отнаследовалось и в const-ссылках. В этом смысле const на параметрах-указателях и параметрах-ссылках можно сказать, что помогает компилятору

Другое дело inline. В реальности он уже давно никому не помогает, компиляторы давно научились сами всё решать. В языках Си, Си99, gnu-Си, Си++ на ключевое слово inline нагружены различные смыслы. И здесь, как мне кажется, у ключевого слова inline была судьба схожая ключевому слову auto. На "inline" нагрузили разные смыслы в разных языках, потому как изначальный смысл (подсказка/просьба компилятору) стал ненужным
1
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
03.12.2015, 23:45 147

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
Мы можем сказать, что зависит от реализации.
Опять не понял. Есть же 3 случая:
-помогают;
-безразлично;
-мешают
И кроме всего, то что зависит от реализации разве есть смысл обсуждать в "ссылки и указатели" для новичков? У них и так глаза квадратные. :scratch:
Цитата Сообщение от DrOffset Посмотреть сообщение
Никакого спора, правда
Вот на этом и хочу закончить.:)
:senor:



Добавлено через 6 минут

Не по теме:

Цитата Сообщение от Evg Посмотреть сообщение
В этом смысле const на параметрах-указателях и параметрах-ссылках можно сказать, что помогает
Хух... Я знал, что когда-то мы придём к общему углу зрения. Я хорошо понимаю различие в глубине. Но общий угол это уже объединяющее начало. :handshake:
:)

0
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
03.12.2015, 23:57 148
Думаю, что это будет интересно почитать хоть кому-то))
https://docs.google.com/docume... sp=sharing
2
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
04.12.2015, 10:33 149
Цитата Сообщение от ct0r Посмотреть сообщение
Думаю, что это будет интересно почитать хоть кому-то))
На первом же примере увидел то же самое, что и во вчерашних экспериментах: компилятор не делает оптимизацию там, где в теории он должен её делать. Запускал "clang -O3". Если у кого-то получится эффект, озвученный в комментариях к примером, расскажите, каким компилятором и с какими опциями сей эффект получился

Добавлено через 4 минуты
А... не дочитал. Там так и написано "Examples 1 and 5 are never optimized as desired, while"
0
Voivoid
04.12.2015, 12:22
  #150

Не по теме:

Это эталонного тупняка тред?
От этого треда странное ощущение.

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

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

Потом ещё раз смотришь и думаешь: да нет, хрень какая-то. :D

0
IGPIGP
04.12.2015, 13:29     Ссылки vs указатели - в чем разница?
  #151

Не по теме:

Voivoid, всё базово архисерьёзное есть в книгах. Мы же говорим либо о каких-то нюансах, которые в книгах найти трудновато, либо о том, что найти просто, но под каким-то необычным углом, поскольку традиционный подход может быть кому-то труден и нужна параллельная информация для сравнения .
Или для разнообразия, как самостоятельной ценности, в конце концов. Иначе же если дублировать то что есть везде, то смысл теряется и выходит вроде работы на лентяя.
Называть ли это личным подходом или отсебятиной, это вопрос доброжелательности. Тем не менее, на маразм нужно реагировать обязательно. :pardon:
Хотя конечно, на конкретные и узкие вопросы, на которые возможен лаконичный ответ так наверное не стоит отвечать. А мало ли праздников общения в сети?
Могу лишь предполагать, что и этот получился на славу. Вы не остались равнодушны. :)

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.12.2015, 13:29

Ссылки и указатели
Добрый день. Возможно было. В чем существенная разница между передачей данных в функцию по ссылке...

Указатели и ссылки [С++]
Всем привет. я тут программу делаю. Цель: определить,принадлежит ли точка заданному промежутку(а...

Ссылки и указатели
Вот есть код в котором я проверял как ведут себя указатели : using namespace std; int* first()...

Ссылки и указатели
Здравствуйте, может кто объяснить в чем будет отличие при передаче в функцию по **, *, *&, &(**),...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
151
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru