Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Pravednik
0 / 0 / 0
Регистрация: 29.11.2011
Сообщений: 13
#1

Передача по ссылке или указателю? - C++

15.02.2013, 17:26. Просмотров 1702. Ответов 26
Метки нет (Все метки)

В каких случаях лучше передавать в функцию ссылки, а в каких указатели?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2013, 17:26     Передача по ссылке или указателю?
Посмотрите здесь:
Передача в функцию по ссылке или указателю C++
Передача параметров в функцию по значению, по ссылке или по указателю C++
Передача по указателю и по ссылке C++
Передача аргументов в функцию по ссылке и указателю C++
Передача параметров функции по значению, ссылке и указателю C++
C++ Почему передача по ссылке не работает, только по указателю?
Передача параметров в функцию по значению, по ссылке и по указателю C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
16.02.2013, 07:46     Передача по ссылке или указателю? #21
Цитата Сообщение от Avazart Посмотреть сообщение
Зачем делать ф-цию если можно сделать класс и его метод... и без указателей...
а метод класса это не функция не? та же самая функция, только используется объектами класса. я вообщето методы и имел ввиду. Хотелось бы увидеть добавление листьев в бинарное дерево с использованием ссылок, честно хотябы ради просто увидеть, потому что я не особо это себе представляю
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,012
16.02.2013, 08:12     Передача по ссылке или указателю? #22
Цитата Сообщение от 0x10 Посмотреть сообщение
Реальный пример когда это необходимо.
Цитата Сообщение от MrGrig Посмотреть сообщение
Хотелось бы увидеть добавление листьев в бинарное дерево с использованием ссылок,
Ок, протупил.
Croessmah
Модератор
Эксперт CЭксперт С++
13051 / 7314 / 814
Регистрация: 27.09.2012
Сообщений: 18,050
Записей в блоге: 3
Завершенные тесты: 1
16.02.2013, 10:34     Передача по ссылке или указателю? #23
Ссылка лишь обертка, которая дополняет, а не заменяет указатели.
Область применения того и другого в C++ определяется конкретной ситуацией.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
16.02.2013, 10:40     Передача по ссылке или указателю? #24
Цитата Сообщение от Pravednik Посмотреть сообщение
В каких случаях лучше передавать в функцию ссылки, а в каких указатели?
Ссылка не позволит удалить аргумент нафиг, указатель лучше для массива, так как адрес ссылки этом случае всё равно придётся присвоить указателю, а иногда бывает полезней всех ссылка на указатель.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6442 / 3081 / 306
Регистрация: 04.12.2011
Сообщений: 8,483
Записей в блоге: 4
16.02.2013, 14:19     Передача по ссылке или указателю? #25
Цитата Сообщение от Croessmah Посмотреть сообщение
Ссылка лишь обертка, которая дополняет, а не заменяет указатели.
Область применения того и другого в C++ определяется конкретной ситуацией.
Совершенно согласен. И по тому как задан вопрос, ответ:
Передача по ссылке или указателю?
вполне это раскрывает. Указатели значительно шире, ссылки уже безопаснее и удобнее (тема для вечной полемики)).
Но язык это соглашение. И поскольку нет возможности написать конструктор копии без использования ссылки (просто по определению, т.к. теоретически и передача указателя тоже гарантирует предотвращение создание копии объекта. То что сам указатель копируется не проблема) то и не обойтись без ссылок как типа.
Но всё раскручивается по обычной спирали. Новичок столкнулся с главой "Ссылки и указатели", а дискуссия давно вышла из границ его понимания.
Мешает пониманию и то, что передача указателя, тоже является видом передачи "по ссылке", чисто терминологически и это встречается в литературе.

Однако ссылка и указатель не как способы передачи а как типы, определяются тем же что и типы: способ и место хранения, допустимые операции...
И разница тут огромна. Указатель - указывает на тип (массив типа, вернее, то есть область памяти которая распределена определённым образом). Даже указатель на одно значение, - указатель на массив из одного члена и обратиться можно по индексу 0)). Его тип в конечном счёте, без инициализации, не завершён в определении. Декларация и инициализации могут быть проведены раздельно, что позволяет использовать мощь указателей. В том числе и для стрельбы в ногу. Преимуществ без недостатков не бывает.
Ссылка, по определению не может быть неинициализирована. Она сразу связана. В контексте, автоматически предоставляет то, что требуется по смыслу: адрес или значение . Само имя переменной является ссылкой на себя и это позволяет передавать переменные туда, где ожидается ссылка, без каких-либо дополнительных усилий.
Кроме того, сама ссылка как переменная не требует выделения памяти.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
16.02.2013, 16:52     Передача по ссылке или указателю? #26
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Что значит противоречит? указатель я могу в любое время перенаправить с одного объекта на другой, или разрушить ранее хранимый по указателю объект и построить новый. Пример привести что ли?
Ссылки думаешь позволят это???
А также перевести на мусор, уничтожить уже уничтоженный объект, еще не выделенный итп. (Я вообще про указатели не говорил например, я отвечал на твое перенаправь ссылку, перенаправь ссылку). Твои претензии к ссылкам в с++ такие же как претензия почему синус нуля не равен единице? Почему? По определению.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2013, 17:25     Передача по ссылке или указателю?
Еще ссылки по теме:
Передача аргумента в функцию по значению, по ссылке, по указателю: в чём концептуальная разница? C++
Как лучше передавать аргумент в функцию - по ссылке или по указателю? C++
Запись по ссылке или указателю в аргументы функции через макрос va_arg C++
C++ Изменение значений переменных по ссылке и по указателю
Передать сумму по ссылке и по указателю (перегрузка функций) C++

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

Или воспользуйтесь поиском по форуму:
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
16.02.2013, 17:25     Передача по ссылке или указателю? #27
Цитата Сообщение от alex_x_x Посмотреть сообщение
А также перевести на мусор
Ну если так рассуждать, то надо писать вообще только на Яве. А я сам знаю, где у меня мусор, где нет, от чего может течь память и как этого не допустить.
К тому же я говорю о реальных ситуациях,
- когда нужно изменить поведение объекта по указателю на базовый класс, удалив один потомок этого класса и сконструировав другой.
- динамические списки/деревья, в которых каждый элемент хранит указатель на следующий и этот указатель изменяется по мере вставки/удаления элементов.
- хранить указатели на какие-нибудь одни данные в нескольких классах, обрабатывающих их каждый по своим принципам, при этом исходный набор данных увеличивается/уменьшается динамически.
...
и.т.д.
Вот и остаётся у ссылок работа лишь заменять указатели в объявлениях функций.
Yandex
Объявления
16.02.2013, 17:25     Передача по ссылке или указателю?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru