Использование ссылок или указателей или вообще без них, плюсы и минусы их использования |
Здравствуйте, гость ( Вход | Регистрация )
Использование ссылок или указателей или вообще без них, плюсы и минусы их использования |
ViGOur |
27.2.2008, 21:35
Сообщение
#1
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Сколько кода пересмотрел, код от кода разумеется различается, но заметил закономерность, используются в основном или ссылки или указатели, использование того и другого встречается редко.
1 вариант:
2 вариант:
3 вариант:
+ 1 и 2 вариант: экономия времени и памяти на копировании, в отличии от 3 варианта. - 3 вариант значение копируется во временную переменную и занимает дополнительную память p.s. затеял эту тему из-за интереса, сколько + и - наберем... |
|
|
Litkevich Yuriy |
27.2.2008, 21:45
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
да, интересно, учитывая что она const.
|
|
|
Andrew Selivanov |
28.2.2008, 10:41
Сообщение
#3
|
Участник Группа: Участник Сообщений: 249 Регистрация: 9.10.2007 Из: Москва Пользователь №: 3 Спасибо сказали: 15 раз(а) Репутация: 6 |
Сколько кода пересмотрел, код от кода разумеется различается, но заметил закономерность, используются в основном или ссылки или указатели, использование того и другого встречается редко. 1 вариант:
2 вариант:
3 вариант:
+ 1 и 2 вариант: экономия времени и памяти на копировании, в отличии от 3 варианта. - 3 вариант значение копируется во временную переменную и занимает дополнительную память p.s. затеял эту тему из-за интереса, сколько + и - наберем... С точки зрения оптимизации в компиляторе (например -O2) для конкретного случая int-a и на разных компиляторах результаты будут разными. Я делаю как удобнее в конкретном случае. Можно ради интереса собрать эти три функции для MSVC 7,8 и GCC 3.x, 4.x (x386) и посмотреть, какой код сгенерится. А вообще оптимизация в ее глобальном понимании - зло IMHO оптимизировать надо в первую очередь не код, а алгоритм, это даст наибольший выигрыш. |
|
|
Andrew Selivanov |
28.2.2008, 11:22
Сообщение
#4
|
Участник Группа: Участник Сообщений: 249 Регистрация: 9.10.2007 Из: Москва Пользователь №: 3 Спасибо сказали: 15 раз(а) Репутация: 6 |
Яркий пример работы оптимизатора GCC 3.4.5 (-O2):
И вот во что это в конечном счете соптимизировалось
|
|
|
ViGOur |
28.2.2008, 11:26
Сообщение
#5
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
- 1 и 2 варианты, в Qt, если невнимательно использовать сигналы и слоты, то при создании обьекта получателя сигнала в другом потоке, и при передаче в слот локальной переменной будут проблемы, в 3 варианте это не будет наблюдаться...
Пример:
Сообщение отредактировал ViGOur - 28.2.2008, 11:28 |
|
|
rich |
15.3.2008, 18:45
Сообщение
#6
|
Участник Группа: Участник Сообщений: 123 Регистрация: 1.3.2008 Пользователь №: 109 Спасибо сказали: 6 раз(а) Репутация: 0 |
|
|
|
0xF |
17.3.2008, 20:58
Сообщение
#7
|
Студент Группа: Участник Сообщений: 71 Регистрация: 12.11.2007 Пользователь №: 20 Спасибо сказали: 0 раз(а) Репутация: 0 |
Цитата внутренне(в компиляторе) ссылки могут реализовать при помащи указателей А ссылка и указатель это одно и тоже по сути, просто синтаксис разный |
|
|
0xF |
17.3.2008, 21:06
Сообщение
#8
|
Студент Группа: Участник Сообщений: 71 Регистрация: 12.11.2007 Пользователь №: 20 Спасибо сказали: 0 раз(а) Репутация: 0 |
Цитата void function( const int &rn) void function( const int *pn) ИМХО, так имеет смысл передавать только составные типы(если const), чтоб не копировать объект, а лишь перекинуть 4 байта адреса в ф-цию... Правка: Цитата void function( const int *pn) Это ещё для массивов может понадобиться Сообщение отредактировал 0xF - 17.3.2008, 21:09 |
|
|
Litkevich Yuriy |
17.3.2008, 21:12
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
если я правильнопонимаю Си, то ссылка и указатель разные вещи:
указатель - переменная содержащая адрес, может указыват в никуда; ссылка - псевдоним конкретной переменной, неможет указыват в никуда, т.е. всегда инициализируется конкретным значением; вроде так Сообщение отредактировал Litkevich Yuriy - 17.3.2008, 21:13 |
|
|
Admin |
17.3.2008, 22:03
Сообщение
#10
|
Администратор Группа: Администратор Сообщений: 646 Регистрация: 9.10.2007 Из: crossplatform.ru Пользователь №: 1 Спасибо сказали: 17 раз(а) Репутация: 2 |
|
|
|
Текстовая версия | Сейчас: 3.1.2025, 2:07 |