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

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

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

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

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

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

Ссылки, указатели - C++
Доброго времени. Как, используя ссылки, указатели и, возможно, другие приемы сделать что-то вроде этого?: int a = 1; int b = 2; ...

Указатели и ссылки - C++
Экспериментируя с указателями пришел к вот таким выводам: int a; //переменная int *b; //указатель int &c = a //ссылка на <a> ...

Указатели и ссылки [С++] - C++
Всем привет. я тут программу делаю. Цель: определить,принадлежит ли точка заданному промежутку(а точнее лежит внутри или снаружи фигуры)....

Указатели и Ссылки - C++
извеняюсь,но никак не могу понять. int sum(int* inLeft, int* inRight) { if(inLeft == inRight) return *inLeft; ...

Указатели и ссылки - C++
Собственно, не могу до конца осознать как это работает, вот пример из вики(комменты входят в пример) int n = 6; // Объявление...

Указатели и ссылки c++ - C++
Здравствуйте! Не могли бы вы объяснить как можно использовать ссылки и указатели c++ на практике? Я не пойму для чего они нужны!

Указатели и ссылки - C++
Используя вместо самой переменной указатель на нее написать программу в соответствии с заданием: Вычислить y = cos|x3-x2|.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
11.07.2012, 01:05     Ссылки vs Указатели #16
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Ага, кроме UB по стандарту, и segfolta по факту
это ты - матом? или что за слова нехорошие? обидеть хочешь?
CyBOSSeR
Эксперт C++
2300 / 1670 / 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
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
11.07.2012, 01:34     Ссылки vs Указатели #18
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
segfault - Segmentation fault и все это ждет при разыменовении нулевого указателя и попытки записи.
виндузятников ждет runtime exception
или как там
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
11.07.2012, 02:23     Ссылки vs Указатели #19
alex_x_x, ага, но приятного все равно мало . Хотя, судя по определению из википедии, segfault он и в винде segfault.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
11.07.2012, 08:31     Ссылки vs Указатели #20
Подытожим!

При передачи изменяемых объектов, используется указатель.
При передаче НЕ изменяемых объектов, используется константная ссылка.
При таком раскладе никто-никогда не забудет, что объект изменяется или не изменяется и все склеротики счастливы.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.07.2012, 18:11     Ссылки vs Указатели #21
Тоже добавлю, что кто-то из великих от плюсов (то ли Эккель, то ли Мейерс, то ли Саттер, а может кто-то ещё) советует в случае, если необходимо менять параметр, передаваемый в функцию, передавать этот параметр по указателю, чтобы программист при передаче такого параметра явно передавал адрес с помощью оператора &. Таким образом, скрытое изменение параметра в том случае, когда программист об этом не подозревает, можно считать плохим тоном.

Добавлено через 40 секунд

Не по теме:

Чёрт, а по факту-то сказал то же, что и Deviaphan... Ну да ладно, зато у меня в посте ещё три известных имени мелькает

taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.07.2012, 18:19     Ссылки vs Указатели #22
Цитата Сообщение от Ksan Посмотреть сообщение
он может не заметить, скажем
int &val
Каким образом?
Цитата Сообщение от Ksan Посмотреть сообщение
и не будет знать, что передается ссылка, а вовсе не копия. Это может повлечь за собой кучу неприятностей.
В чём здесь преимущество указателей? По ним тоже передаётся оригинал, а не копия, причём, ещё и удаляемый. а по ссылке не удаляемый. Добавлено через 25 секунд
Цитата Сообщение от Ksan Посмотреть сообщение
Даже сам разработчик может спустя время забыть о злополучном знаке &.
А при чём здесь вообще забывчивость? Читай прототип и будешь знать, что передаёшь. А если ты & модешь забыть, то тем более забудешь букву в имени.

Добавлено через 2 минуты
Цитата Сообщение от Ksan Посмотреть сообщение
да даже, к примеру
Код C++
1
func(int &a);
& легко не заметить.
Не возможно и не только здесь, но и в прототипах на шесть-восемь экранов в длину, а они всё таки встречаются не часто.
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
12.07.2012, 18:24     Ссылки vs Указатели #23
Цитата Сообщение от taras atavin Посмотреть сообщение
прототипах на шесть-восемь экранов в длину
мда
Evg
Эксперт CАвтор FAQ
17547 / 5785 / 370
Регистрация: 30.03.2009
Сообщений: 15,931
Записей в блоге: 26
12.07.2012, 18:26     Ссылки vs Указатели #24
Цитата Сообщение от Deviaphan Посмотреть сообщение
При передачи изменяемых объектов, используется указатель.
При передаче НЕ изменяемых объектов, используется константная ссылка.
При таком раскладе никто-никогда не забудет, что объект изменяется или не изменяется и все склеротики счастливы.
Делаю именно так. Идея передавать модифицируемый объект по ссылке мне не нравится в принципе. И мне было пофигу, что кругом люди поступают именно так. Очень рад, что я не одинок в подобном мнении
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.07.2012, 18:29     Ссылки vs Указатели #25
Ksan, ты функции на угад подбираешь, лишь бы параметры подошли? Тогда ты всё равно не сможешь программировать, так как при вызове функции надо точно знать, что именно она сделает, в том числе, как именно изменит параметр. А не изменит/не изменит. Ну а если переменная должна обнулиться, то в чём проблема? Ну передашь ты по значению и что? Параметр может и не изменится, но если ты функцию не знаешь, то она может много чего другого понаделать. В том числе, залезть в глобальную память и изменить переменные, которые ты не передавал.
Evg
Эксперт CАвтор FAQ
17547 / 5785 / 370
Регистрация: 30.03.2009
Сообщений: 15,931
Записей в блоге: 26
12.07.2012, 18:32     Ссылки vs Указатели #26
taras atavin, классическая ошибка, вызванная предположением, что программы только пишут. Но на самом деле программы ещё и читают. В том числе и чужие программы
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.07.2012, 18:35     Ссылки vs Указатели #27
Цитата Сообщение от Evg Посмотреть сообщение
Идея передавать модифицируемый объект по ссылке мне не нравится в принципе. И мне было пофигу, что кругом люди поступают именно так. Очень рад, что я не одинок в подобном мнении
Ни один разработчик функции, экспортируемой из библиотеки, в здравом уме не станет принимать и возвращать ссылки. Но почему нельзя их юзать внутри одной программы? Я по указателям передаю или массивы, или наружу, остальное ссылками. И не изменяемое тоже, пока не возникнет необходимость использования макросов и явных констант в фактических параметрах (именованными константами не пользуюсь вообще).

Добавлено через 40 секунд
Цитата Сообщение от Evg Посмотреть сообщение
taras atavin, классическая ошибка, вызванная предположением, что программы только пишут
Не моя.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
12.07.2012, 18:48     Ссылки vs Указатели #28
Цитата Сообщение от Evg Посмотреть сообщение
Идея передавать модифицируемый объект по ссылке мне не нравится в принципе.
Мне нравится.) Если объект всегда необходимо передавать, то чаще именно ссылку использую. Экономия одного ассерта.)))
Но вариант с неконстантным указателем и константной ссылкой считаю более правильным и всем рекомендую к использованию.)

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
но и в прототипах на шесть-восемь экранов в длину
Учитывая, что прототип это только имя функции и описание типов её аргументов, то я испытываю трепет от одной только мысли о размере реализации этой функции!

Добавлено через 2 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
именованными константами не пользуюсь вообще
По идее, после этого любой диалог нужно прекращать.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
12.07.2012, 18:53     Ссылки vs Указатели #29
Deviaphan, silent_1991, Evg, отчасти с вами соглашусь, но как быть тому кто пишет отдельный независимый модуль, которым будут пользоваться другие? Понатыкать ассертов конечно можно, но это не всегда хороший выход из ситуации.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2012, 19:02     Ссылки vs Указатели
Еще ссылки по теме:

Ссылки и указатели - C++
Добрый день. Возможно было. В чем существенная разница между передачей данных в функцию по ссылке или указателю. В каких случаях вы бы...

Ссылки и указатели - C++
Добрый день, не могу понять чем помогают при использовании указатели и ссылки? Есть код на c++ #progma once class well { ...

Ссылки и указатели - C++
Всем привет. Совсем запутался с ссылками и указателями. Помогите решать задачку: Функция принимает два аргумента, число с плавающей...

Указатели и ссылки? - C++
Ниже приведёна программы которая вызывает функцию. В функции происходит следующее создаются 2 массива в которые записыватся чётные и...

Указатели и ссылки - C++
Допустим, что есть функция, в которую мы кидаем массив по указателю и кол-ву элементов. void printArray(int *arr, int elements) ...


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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17547 / 5785 / 370
Регистрация: 30.03.2009
Сообщений: 15,931
Записей в блоге: 26
12.07.2012, 19:02     Ссылки vs Указатели #30
Цитата Сообщение от Deviaphan Посмотреть сообщение
Мне нравится.) Если объект всегда необходимо передавать, то чаще именно ссылку использую. Экономия одного ассерта.)))
Предпочитаю экономить время на поиск ошибок, в том числе и другими людьми, которые будут впервые в жизни видеть мой код. Логика простая "funx(x)" не меняет значение x, а "func (&x)" - меняет. Человек, читающий код, вникнет в проблемное место намного быстрее, если не будет изучать прототип (а то и реализацию) каждой встретившейся функции. Спичечные экономии на assert'ах не особенно и интересны.

Цитата Сообщение от Jupiter Посмотреть сообщение
но как быть тому кто пишет отдельный независимый модуль, которым будут пользоваться другие?
А проблема-то в чём? А то может мы о разных вещах говорим
Yandex
Объявления
12.07.2012, 19:02     Ссылки vs Указатели
Ответ Создать тему
Опции темы

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