быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
||||||
1 | ||||||
Переменные ссылочного типа. Просьба разжевать и положить в рот.08.10.2010, 22:20. Показов 3970. Ответов 38
Метки нет (Все метки)
А также просьба указывать только ЯВНО СТОЯЩУЮ литература, а остальная у меня есть.
...Друзья! Я ничё не понимаю. Вот, например, такой код, функция и её вызов:
Адрес переменной a или значение 98? Спасибо. (Вопрос вообще для меня каверзный, позже объясню почему) Добавлено через 10 минут ...А то я дальше продвинуться не могу
0
|
08.10.2010, 22:20 | |
Ответы с готовыми решениями:
38
Создать бинарное дерево, по правой ветке - переменные типа инт, по левой - 2 переменные типа чар Rvalue ссылочного типа классы с использованием ссылочного типа данных. Переменная ссылочного типа в прототипе функции |
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
09.10.2010, 00:45 | 21 |
Ссылка не замена указателю, и них разное предназначение. Указатели используются для передачи аргументов для модификации или когда параметр может быть опциональным. Ссылки же, за редким исключением (типа std::swap, когда и так понятно, что аргументы будут модифицироваться), используются для передачи аргумента для чтения, при этом ссылка является константной.
"Ненулевость" ссылок особого значения не имеет, т.к. проверить указатель на ноль труда не составляет.
0
|
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
|
|
09.10.2010, 00:56 | 22 |
Указатель тоже можно объявить константным и передавать только для чтения. Но использование ссылок при передаче в функции удобнее, да и лишних проверок не надо.
0
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
09.10.2010, 00:57 | 23 |
0
|
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
|
|
09.10.2010, 00:59 | 24 |
Так я и не спорил с тем, что это удобнее, я о том, что удобность не единственный плюс ссылок=)))
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
09.10.2010, 01:04 | 26 |
KuKu, А возможно заменить в еде колбасу на шину? У них несколько разные предназначения. Как и у ссылок с указателями.
0
|
ForEveR
|
09.10.2010, 01:09
#28
|
Не по теме: KuKu, А это уже смотря кто что хочет кушать. Кто-то может любить употреблять шины
0
|
KuKu
|
09.10.2010, 01:10
#29
|
Не по теме: шины из нефтеотходов - если даже будешь их есть, эт не долго будет продолжаться:)
0
|
ForEveR
|
09.10.2010, 01:12
#30
|
Не по теме: KuKu, Это частности.
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
09.10.2010, 01:48 [ТС] | 31 |
Работая со структурами PE файла, я поднаторел с указателями. Мне кажется, любой код, где есть ссылки я заменю на код с указателями и память не потеряю.
Язык С. конечно. НАверное, всё вышесказанное отнёс бы и к С++, но я только начал его изучать, синтаксис ещё не освоил. Может, и придётся попотеть, но я автоматизмом не избалован, работаю в DEV C++, всё вручную, всё на коленке, все проверки, выделение памяти и прочее... Только еле-еле начал переползать в MS VS. Ну, может я самонадеян слишком, не знаю.
0
|
11 / 11 / 2
Регистрация: 09.10.2010
Сообщений: 23
|
|||||||||||
09.10.2010, 02:06 | 32 | ||||||||||
Ссылки, указатели. Какая разница? Код взял из стартового сообщения, компилил с /FAs, в итоге:
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
09.10.2010, 02:14 [ТС] | 33 |
Наверное, тот случай слишком лёгкий. Эх, здорово было бы рассмотреть под микроскопом передачу ссылочного аргумента в функцию член какого-нибудь класса:
"Одна из основных причин, из-за которой язык С++ вынужден поддерживать ссылки, заключается в том, что вы могли написать конструктор копирования. Без такого синтаксиса задача была бы невыполнимой" Далее приводятся аргументы. Брайан Оверленд, "C++ без страха"
0
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
09.10.2010, 02:22 | 34 |
kravam, ассемблерный код всегда будет одинаков, ссылки это всего лишь "плюшка" языка и не более.
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
09.10.2010, 02:34 [ТС] | 35 |
В таком случае всё сводится к удобству-неудобству использования ссылок и указателей. Для меня к очень мнимому и сомнительному.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
09.10.2010, 02:52 | 36 |
kravam, Ну так. Что мешает развеять эти сомнения? Практика и еще раз практика.
0
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
||||||
09.10.2010, 14:09 | 37 | |||||
Без ссылок у тебя не получится написать конструктор копирования, перегрузки операторов. Так что ничего мнимого нет, у константных ссылок свое явное предназначение - передача в качестве аргумента объектов пользовательских типов для чтения. А неконстантные ссылки можно, в принципе, и не рассматривать вовсе, они используются довольно редко и также для удобства, пример:
1
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||||||||||||||||||||||
20.06.2011, 07:00 | 38 | |||||||||||||||||||||||||
С какого перепугу здесь будет передаваться значение? В стек помещается адрес, а значение по этому адресу читается. Регистр же используется только в оптимизированном вызове: чтоб поместить адрес в стек, его всё равно придётся загрузить в регистр, и в самой функции для доступа к адресу в стеке его также придётся загурзить в регистр, значит можно оба раза отвести для этих целей один и тот же регистр и убрать из объектного кода стековые операции.
Добавлено через 2 минуты Передача праметра чрез регистры придумана ещё на ассемблере, во времена спектрумов уже существовала, а на самих спектрумах, на сколько мне известно, была основной. Добавлено через 1 минуту
Именно поэтому такой вызов и запрещён. Кстати, как вообще концептуально решить применение константы в качестве изменяемого параметра? Добавлено через 7 минут эффективность указателя может снижатья кучей проверок вроде
Добавлено через 1 минуту С какой стати? Добавлено через 1 минуту
С помощью указателя только адрес и передаётся. Добавлено через 54 секунды Просто до полного безобразия. Добавлено через 1 минуту
Если тебе ни о чём не говорит имя функции, то по синтаксису вызова ты поёмёшь только сам факт моджификации, но не как именно изменяемый параметр модифицируется, что как раз и ведёт к ошибкам и затрудняет отладку. Причём, даже если параметр предаётся по значению, но имя функции не понятно, то беда будет та же. Хорошо, путь параметры не меняются, тогда функция возвращает значение, присваиваемое переменной, или даже обращается к глобальным данным, но ты не понимаешь, как именно меняется значение переменной слева от опреатора присваивания. Если же имя функции понятно, то говорит о её назначении позовляет сделать вывод не только о факте изменения парметров, но и о том, как именно они меняются. Добавлено через 1 минуту Согласен, но не совсем. Указатели надо использовать только для динамического выделения памяти и передачи параметров-массивов. Добавлено через 2 минуты Но занимает процессорное время, а если полезеных операций на одну проверку будет приходиться мало, то прога будет тормозить на проверках.
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
20.06.2011, 16:31 [ТС] | 39 |
taras atavin, я так-то со всем разобрался, ссылки суть те же указатели, только без использования синтаксиса указателей, всё остальное прилагается.
0
|
20.06.2011, 16:31 | |
20.06.2011, 16:31 | |
Помогаю со студенческими работами здесь
39
Переменные ссылочного типа Переменные ссылочного типа Переменные ссылочного типа и присваивание Как описываются переменные типа запись? В каких случаях целесообразно использовать переменные типа запись? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |