1 | |
Ссылки vs указатели - в чем разница?21.11.2015, 20:04. Показов 13478. Ответов 150
Метки нет (Все метки)
Навеяно соседней темой. Не понимаю в чем разница, хотя несколько раз честно пробовал почитать на эту тему, правда без должного внимания и усердия. Зато программировал на ассемблере и чистом С, понимаю абстракцию "адрес ячейки памяти" и "размер типа в байтах", с арифметикой указателей и указателями на указатели сложностей вроде не испытываю Есть переменная, если она не регистровая - то лежит в какой-то ячейке памяти (или нескольких, зависит от разрядности памяти и структуры типа переменной), адрес этой ячейки (ака указатель) я могу запоминать в другую переменную типа указателя, передавать/возвращать ее из функций, инкрементировать/декрементировать для движения по массиву переменных (если я его предварительно нарезал в той области памяти конечно), разыменовывать и получать/изменять значение. Вроде все. При чем тут термин "ссылки"? А еще оказывается бывают смартпоинтеры, умные указатели и прочие страшные слова
0
|
21.11.2015, 20:04 | |
Ответы с готовыми решениями:
150
Указатели и ссылки: в чем разница Указатели и ссылки: в чём их разница и сходство? в чем разница? массивы и указатели строк Ссылки и указатели - в чем преимущество одного над другим |
Комп_Оратор)
|
|
03.12.2015, 22:45 | 141 |
я же и говорю, - не обязан. И опять не придумал, - пишут везде. Потому и решил, что const повышает шансы/снижает вычислительную нагрузку, то есть помогает. И так и написал - "подсказка". Слово inline это же тоже подсказка/рекомендация. Не понимаю в чём спор.
Как-то всё сводится к тому у кого компилятор толще. Так я везде и пишу, что не профи программист.
0
|
03.12.2015, 23:05 | 142 |
Для компилятора 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; } В Си++ это намного больше, чем подсказка/рекомендация - https://www.cyberforum.ru/blogs/18334/blog93.html
3
|
DrOffset
|
03.12.2015, 23:16
#143
|
0
|
Комп_Оратор)
|
|
03.12.2015, 23:24 | 144 |
Спасибо, с интересом прочёл. Однако в контексте разговора и так ушедшего от ссылок я имел виду, что ничего там не гарантировано и логично полагать что const помогает.
Ну давайте скажем, что не const ни inline не помогают. Я не берусь их сравнивать, - боже упаси. Тема и так ушла в туман. Добавлено через 4 минуты
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
03.12.2015, 23:29 | 145 |
Мы можем сказать, что зависит от реализации.
Однако, как правило, программисты не работают на бесконечном множестве реализаций. У меня вот используются 4 аппаратные платформы и 3 ОС. Также 3 разных компилятора. Их способности к оптимизации на этих платформах известны, поэтому можно делать прогнозы. Не по теме: Разве я писал, что не согласен. Я просто ответил на твои вопросы в посте. Ну пусть там не было знаков вопроса, но ты же сказал, что не уверен. Вот я и уточнил :) Никакого спора, правда :)
0
|
03.12.2015, 23:37 | 146 |
Чтобы не ломать язык об терминологию сразу скажу, что везде про 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
|
Комп_Оратор)
|
|
03.12.2015, 23:45 | 147 |
Не по теме: Опять не понял. Есть же 3 случая: -помогают; -безразлично; -мешают И кроме всего, то что зависит от реализации разве есть смысл обсуждать в "ссылки и указатели" для новичков? У них и так глаза квадратные. :scratch: Вот на этом и хочу закончить.:) :senor: Добавлено через 6 минут
0
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
03.12.2015, 23:57 | 148 |
Думаю, что это будет интересно почитать хоть кому-то))
https://docs.google.com/docume... sp=sharing
2
|
04.12.2015, 10:33 | 149 |
На первом же примере увидел то же самое, что и во вчерашних экспериментах: компилятор не делает оптимизацию там, где в теории он должен её делать. Запускал "clang -O3". Если у кого-то получится эффект, озвученный в комментариях к примером, расскажите, каким компилятором и с какими опциями сей эффект получился
Добавлено через 4 минуты А... не дочитал. Там так и написано "Examples 1 and 5 are never optimized as desired, while"
0
|
Voivoid
|
04.12.2015, 12:22
#150
|
Не по теме: Это эталонного тупняка тред?
0
|
IGPIGP
|
04.12.2015, 13:29
Ссылки vs указатели - в чем разница?
#151
|
Не по теме: Voivoid, всё базово архисерьёзное есть в книгах. Мы же говорим либо о каких-то нюансах, которые в книгах найти трудновато, либо о том, что найти просто, но под каким-то необычным углом, поскольку традиционный подход может быть кому-то труден и нужна параллельная информация для сравнения .
0
|
04.12.2015, 13:29 | |
Ссылки и указатели Указатели и ссылки [С++] Ссылки и указатели Ссылки и указатели Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |