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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.82
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
#1

Ссылки vs Указатели - C++

10.07.2012, 18:54. Просмотров 4142. Ответов 81
Метки нет (Все метки)

Почему ссылки считаются более хорошим средством, чем указатели?
Ведь если человек будет использовать сторонние классы, он может не заметить, скажем
int &val
и не будет знать, что передается ссылка, а вовсе не копия. Это может повлечь за собой кучу неприятностей. Даже сам разработчик может спустя время забыть о злополучном знаке &. Так почему ссылки лучше?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2012, 18:54     Ссылки vs Указатели
Посмотрите здесь:

C++ Указатели и ссылки
C++ Ссылки и указатели
C++ Ссылки и указатели
C++ Указатели и ссылки [С++]
Указатели и Ссылки C++
C++ Указатели и ссылки
Указатели и ссылки? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
10.07.2012, 18:57     Ссылки vs Указатели #2
Ksan, безопаснее.
Ведь если человек будет использовать сторонние классы, он может не заметить, скажем
int &val
и не будет знать, что передается ссылка, а вовсе не копия. Это может повлечь за собой кучу неприятностей. Даже сам разработчик может спустя время забыть о злополучном знаке
А вот за возвращение ссылки где попало надо руки отрывать.
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
10.07.2012, 19:05  [ТС]     Ссылки vs Указатели #3
soon, ты не совсем понял.
да даже, к примеру
C++
1
func(int &a);
& легко не заметить. И тогда будешь ожидать, что ничего не изменится с переменной, а она обнулится.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
10.07.2012, 19:08     Ссылки vs Указатели #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ksan, Еще раз. Либо это должно быть пописано в документации, либо это должно быть понятно по функции, либо "программист" уже сидит без рук и горько плачет. Занавес.

А вообще, насколько надо быть слепым, чтобы не заметить &?
Catstail
Модератор
 Аватар для Catstail
21788 / 10512 / 1706
Регистрация: 12.02.2012
Сообщений: 17,526
10.07.2012, 19:54     Ссылки vs Указатели #5
Цитата Сообщение от soon Посмотреть сообщение
А вообще, насколько надо быть слепым, чтобы не заметить &?
- "Это точно", сказал Верещагин. Но все же лучше без членовредительства...
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6348 / 2995 / 295
Регистрация: 04.12.2011
Сообщений: 8,036
Записей в блоге: 3
10.07.2012, 20:04     Ссылки vs Указатели #6
Цитата Сообщение от Ksan Посмотреть сообщение
Почему ссылки считаются более хорошим средством, чем указатели?
А что звездочку не заметить труднее? Если в глазах звездочки, (имхо) легче, а амперсанд видно. Вообще же и по указателю тоже копия не передаётся и разница только в том, что внутри функции не нужно пользоваться разыменованием на каждом шагу.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
10.07.2012, 20:08     Ссылки vs Указатели #7
разница только в том, что внутри функции не нужно пользоваться разыменованием на каждом шагу.
Неа, еще ссылки жестко привязаны к одному адресу, и этот адрес задается при создании. ИМХО, это значимее.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6348 / 2995 / 295
Регистрация: 04.12.2011
Сообщений: 8,036
Записей в блоге: 3
10.07.2012, 20:19     Ссылки vs Указатели #8
Цитата Сообщение от soon Посмотреть сообщение
ссылки жестко привязаны к одному адресу, и этот адрес задается при создании.
Разумеется, я имел в ввиду в контексте вопроса:
Цитата Сообщение от Ksan Посмотреть сообщение
и не будет знать, что передается ссылка, а вовсе не копия.
ну, то есть - передал адрес будь внимателен, модифицировать легко. Ну а используя константный указатель, можно нивелировать разницу. Хотя конечно, это не одно и то же.
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
10.07.2012, 21:39  [ТС]     Ссылки vs Указатели #9
IGPIGP, звездочку легче не заметить? Вы, однако, не смыслите. Компилятор выдаст эррор, если ему подсунуть переменную вместо указателя
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6348 / 2995 / 295
Регистрация: 04.12.2011
Сообщений: 8,036
Записей в блоге: 3
10.07.2012, 23:08     Ссылки vs Указатели #10
Цитата Сообщение от Ksan Посмотреть сообщение
Компилятор выдаст эррор, если ему подсунуть переменную вместо указателя
Или не понял вопрос или Вы ответ. Передаете указатель, - можете модифицировать переменную, так же как и при передаче по ссылке. Никакой копии в этом случае не передаётся. Так увидел текст вопроса. А вообще вопрос, что лучше не корректен. Если ожидаете возврат переданного указателя на другой участок памяти, что является сильной стороной указателя, то передать указатель - святое дело.)
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2297 / 1667 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
11.07.2012, 00:17     Ссылки vs Указатели #11
Цитата Сообщение от soon Посмотреть сообщение
Неа, еще ссылки жестко привязаны к одному адресу, и этот адрес задается при создании. ИМХО, это значимее.
Значимее то, что ссылка не может быть "нулевой" в отличии от указателя.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
11.07.2012, 00:29     Ссылки vs Указатели #12
принципиальной разницы нет. просто другая форма записи. все равно при использовании ссылки на самом деле указатель передается. я предпочитаю ссылками не пользоваться, но когда у кого-то в ф-ии встречается - не имею проблем.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
11.07.2012, 00:30     Ссылки vs Указатели #13
Значимее то, что ссылка не может быть "нулевой" в отличии от указателя.
Ну да, это подразумевалось, поскольку у нуля нет адреса.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
11.07.2012, 00:35     Ссылки vs Указатели #14
Цитата Сообщение от soon Посмотреть сообщение
Ну да, это подразумевалось, поскольку у нуля нет адреса.
с этим тоже нет проблем:

C++
1
2
3
4
5
6
7
void foo (object &o){
   o.item = 0;
}
 
...
object *pOb = NULL;
foo (*pOb);
важно, чтобы понимал, с чем играешься.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2297 / 1667 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
11.07.2012, 00:51     Ссылки vs Указатели #15
Цитата Сообщение от novi4ok Посмотреть сообщение
с этим тоже нет проблем:
Ага, кроме UB по стандарту, и segfolta по факту
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
11.07.2012, 01:05     Ссылки vs Указатели #16
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Ага, кроме UB по стандарту, и segfolta по факту
это ты - матом? или что за слова нехорошие? обидеть хочешь?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2297 / 1667 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
11.07.2012, 01:17     Ссылки vs Указатели #17
Это сарказм? Если нет, то UB - Undefined behavior, segfault - Segmentation fault и все это ждет при разыменовении нулевого указателя и попытки записи.

Добавлено через 4 минуты
Вот пример:
[development]$ cat segfault.cpp
int main() {
int* p = 0;
*p = 0;
}
[development]$ g++ segfault.cpp -o segfault
[development]$ ./segfault
Segmentation fault (core dumped)
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
11.07.2012, 01:34     Ссылки vs Указатели #18
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
segfault - Segmentation fault и все это ждет при разыменовении нулевого указателя и попытки записи.
виндузятников ждет runtime exception
или как там
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2297 / 1667 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
11.07.2012, 02:23     Ссылки vs Указатели #19
alex_x_x, ага, но приятного все равно мало . Хотя, судя по определению из википедии, segfault он и в винде segfault.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2012, 08:31     Ссылки vs Указатели
Еще ссылки по теме:

Указатели и ссылки C++
C++ Указатели и ссылки c++
Указатели и ссылки C++
C++ Ссылки, указатели
Ссылки и указатели C++

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

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1285 / 1219 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
11.07.2012, 08:31     Ссылки vs Указатели #20
Подытожим!

При передачи изменяемых объектов, используется указатель.
При передаче НЕ изменяемых объектов, используется константная ссылка.
При таком раскладе никто-никогда не забудет, что объект изменяется или не изменяется и все склеротики счастливы.
Yandex
Объявления
11.07.2012, 08:31     Ссылки vs Указатели
Ответ Создать тему
Опции темы

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