Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
15.09.2003, 17:35
|
|||
|---|---|---|---|
Ссылки и указатели - в чем разница? |
|||
|
#18+
Вопрос наверное тупой, но все-же.. В чем принципиальная разница между передачей аргументов в функцию по ссылке и указателю? Т.е. void f(int& a, int& b) { a=b; } и void f(int *a, int *b) { *a=*b; } В книжке Ирэ Пол "ООП с использованием С++" написано, что существенной разницы как-бы никакой, но что-то мне подсказывает, что не зря введена дублирующая конструкция. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.09.2003, 17:40
|
|||
|---|---|---|---|
Ссылки и указатели - в чем разница? |
|||
|
#18+
imho, что-бы красивше было, если не требуется работать именно с указателем, когда нужно только поменять значение аргумента или не пихать все значение в стек ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.09.2003, 18:01
|
|||
|---|---|---|---|
Ссылки и указатели - в чем разница? |
|||
|
#18+
Вы хотите сказать, что в случае использования ссылок уже сгенеренный код не будет содержать косвенной адресации, т.е. как минимум будет короче и быстрее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.09.2003, 18:08
|
|||
|---|---|---|---|
|
|||
Ссылки и указатели - в чем разница? |
|||
|
#18+
Вообще-то понятие ссылок введено не столько для эффективности, сколько для типизации. Чтобы контроль усилить и от тяжкого наследия C - указателей подальше отойти... А код зависит от компилятора, но по идее, для ссылки компилятор еще работу с RTTI может примешать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.09.2003, 18:30
|
|||
|---|---|---|---|
Ссылки и указатели - в чем разница? |
|||
|
#18+
2Mik Prokoshin. А можно немного подробнее узнать про описанные вами причины? - что бы понять и проникнуться в суть?. Ведь если я напишу *a=*b и они будут разных типов, то компилятор выдаст ошибку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.09.2003, 18:58
|
|||
|---|---|---|---|
Ссылки и указатели - в чем разница? |
|||
|
#18+
Ggg, брось эту книжку, возми Страуструпа :) вся разница в семантике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.09.2003, 19:03
|
|||
|---|---|---|---|
Ссылки и указатели - в чем разница? |
|||
|
#18+
to Gcc "Вы хотите сказать, что в случае использования ссылок уже сгенеренный код не будет содержать косвенной адресации, т.е. как минимум будет короче и быстрее?" нет код будет практически одинаковым, про "красивше" я имел в виду, что a = b приятнее выглядит чем *a = *b. плюс к этому void f(int& a, int& b) лучше чем void f(int* a, int* b); тем, что в теле функции в первом варианте не получится написать delete b; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.09.2003, 19:09
|
|||
|---|---|---|---|
|
|||
Ссылки и указатели - в чем разница? |
|||
|
#18+
Ну, начнем с того, что ссылка (reference) была введена для поддержки перегрузки операторов: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Чтобы нас ожидало не будь ссылок? Неестественный на вид код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Далее, указатель может быть равен 0 (указывать на несуществующий объект), тогда, как ссылка не может ссылаться на объект по адресу 0. Если вы выкините этот финт, ваша программа сразу же перейдет в разряд ill-formed: Код: plaintext 1. По сути своей, ссылка - псевдоним переменной или константы в памяти. Ее нельзя переназначить, в отличие от указателя: Код: plaintext 1. 2. 3. Ну, и о том как ссылка обычно представляется компилятором: Код: plaintext Пожалуй, все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.09.2003, 20:00
|
|||
|---|---|---|---|
|
|||
Ссылки и указатели - в чем разница? |
|||
|
#18+
Ну и еще : одна (а может и главная) цель ссылок - повысить надежность и читаемость программы. Например, чтобы не написать случайно (предположим int *a, int *b) *a+b или a=b Если есть выбор - конечно надо писать ссылки. По реализации Широков все отлично написал :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.09.2003, 20:28
|
|||
|---|---|---|---|
Ссылки и указатели - в чем разница? |
|||
|
#18+
"По реализации Широков все отлично написал :-)" присоединяюсь! Ж:-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.09.2003, 21:24
|
|||
|---|---|---|---|
Ссылки и указатели - в чем разница? |
|||
|
#18+
добавлю свои 5 копеек. При выборе решения что использовать - ссылки или указатели правилом хорошего тона считается передавать по ссылке стековые объекты и статические объеты, а по указателям - созданные по new (malloc, calloc, ...). Т.е. в прилежной программе необходимо определиться - с какими объектами будем работать по значению (т.е. создавать их в стеке или как статические переменные, или хранить в массивах и контейнерах по знаечению), а какие - создавать только по new. Ну и использовать для первых ссылки, а для вторых - указатели. Корректное использование ссылок предполагает, что оперируемая ссылка никогда не ссылается на NULL, т.е. мы избавлены от необходимости проверять ее на NULL (типа &ref1==NULL). В то время как проверять на NULL указатели прилежная программа должна всегда. Если в программе "путаются" и перемешиваются объекты, создаваемые в стеке и в куче, то возможна неприятная ситуация - разыменование указателя для передачи по ссылке. Если указатель был равен NULL, то и ссылка будет ссылаться по этому адресу - в космос. И наша программка скромно упадет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&mobile=1&tid=2036005]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
33ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 317ms |

| 0 / 0 |
