Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Ссылки и указатели - в чем разница?
|
|||
|---|---|---|---|
|
#18+
Вопрос наверное тупой, но все-же.. В чем принципиальная разница между передачей аргументов в функцию по ссылке и указателю? Т.е. void f(int& a, int& b) { a=b; } и void f(int *a, int *b) { *a=*b; } В книжке Ирэ Пол "ООП с использованием С++" написано, что существенной разницы как-бы никакой, но что-то мне подсказывает, что не зря введена дублирующая конструкция. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 17:35 |
|
||
|
Ссылки и указатели - в чем разница?
|
|||
|---|---|---|---|
|
#18+
imho, что-бы красивше было, если не требуется работать именно с указателем, когда нужно только поменять значение аргумента или не пихать все значение в стек ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 17:40 |
|
||
|
Ссылки и указатели - в чем разница?
|
|||
|---|---|---|---|
|
#18+
Вы хотите сказать, что в случае использования ссылок уже сгенеренный код не будет содержать косвенной адресации, т.е. как минимум будет короче и быстрее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 18:01 |
|
||
|
Ссылки и указатели - в чем разница?
|
|||
|---|---|---|---|
|
#18+
Вообще-то понятие ссылок введено не столько для эффективности, сколько для типизации. Чтобы контроль усилить и от тяжкого наследия C - указателей подальше отойти... А код зависит от компилятора, но по идее, для ссылки компилятор еще работу с RTTI может примешать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 18:08 |
|
||
|
Ссылки и указатели - в чем разница?
|
|||
|---|---|---|---|
|
#18+
2Mik Prokoshin. А можно немного подробнее узнать про описанные вами причины? - что бы понять и проникнуться в суть?. Ведь если я напишу *a=*b и они будут разных типов, то компилятор выдаст ошибку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 18:30 |
|
||
|
Ссылки и указатели - в чем разница?
|
|||
|---|---|---|---|
|
#18+
Ggg, брось эту книжку, возми Страуструпа :) вся разница в семантике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 18:58 |
|
||
|
Ссылки и указатели - в чем разница?
|
|||
|---|---|---|---|
|
#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:03 |
|
||
|
Ссылки и указатели - в чем разница?
|
|||
|---|---|---|---|
|
#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, 19:09 |
|
||
|
Ссылки и указатели - в чем разница?
|
|||
|---|---|---|---|
|
#18+
Ну и еще : одна (а может и главная) цель ссылок - повысить надежность и читаемость программы. Например, чтобы не написать случайно (предположим int *a, int *b) *a+b или a=b Если есть выбор - конечно надо писать ссылки. По реализации Широков все отлично написал :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 20:00 |
|
||
|
Ссылки и указатели - в чем разница?
|
|||
|---|---|---|---|
|
#18+
"По реализации Широков все отлично написал :-)" присоединяюсь! Ж:-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 20:28 |
|
||
|
Ссылки и указатели - в чем разница?
|
|||
|---|---|---|---|
|
#18+
добавлю свои 5 копеек. При выборе решения что использовать - ссылки или указатели правилом хорошего тона считается передавать по ссылке стековые объекты и статические объеты, а по указателям - созданные по new (malloc, calloc, ...). Т.е. в прилежной программе необходимо определиться - с какими объектами будем работать по значению (т.е. создавать их в стеке или как статические переменные, или хранить в массивах и контейнерах по знаечению), а какие - создавать только по new. Ну и использовать для первых ссылки, а для вторых - указатели. Корректное использование ссылок предполагает, что оперируемая ссылка никогда не ссылается на NULL, т.е. мы избавлены от необходимости проверять ее на NULL (типа &ref1==NULL). В то время как проверять на NULL указатели прилежная программа должна всегда. Если в программе "путаются" и перемешиваются объекты, создаваемые в стеке и в куче, то возможна неприятная ситуация - разыменование указателя для передачи по ссылке. Если указатель был равен NULL, то и ссылка будет ссылаться по этому адресу - в космос. И наша программка скромно упадет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 21:24 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32265491&tid=2036005]: |
0ms |
get settings: |
10ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
25ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 336ms |

| 0 / 0 |
