Как происходит возврат значения по ссылке?08.03.2015, 18:19. Показов 9960. Ответов 88
Метки нет (Все метки)
Добрый вечер, распишите пожалуйста детально про то, как происходит возврат значения по ссылке.
Можно вот на этом примере:
0
|
||||||
| 08.03.2015, 18:19 | |
|
Ответы с готовыми решениями:
88
Возврат значения по ссылке Запутался и уже не понимаю как вообще может работать возврат объекта по ссылке Возврат по ссылке |
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 10.03.2015, 12:43 | ||
|
Не по теме: да, буду.
0
|
||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||||||||
| 10.03.2015, 12:59 | ||||||||
![]() Добавлено через 14 минут Конечно нельзя считать ее указателем как таковым и утверждать, что она указатель. Ссылка - это ссылка. И чем же это для своего удобства мешает считать ее саморазыменовывающимся указателем когда Не по теме: Вы черезчур категоричны
0
|
||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 10.03.2015, 12:59 | |||||||
|
поначитавшись вот таких допущений два дня пытался похакать адрес ссылки. пока до меня не дошло, что нельзя получить то, чего в принципе не существует. Можно например, задуплить ссылку, как член в класс, и хаком вытащить её адрес. только это будет адрес копии ссылки, а не оригинальной ссылки. или можно похакать аргументы функции и вытащить адрес (только это не всегда срабатывает) но опять же - аргумент функции - это уже копия ссылки. я ж хотел хакнуть оригинал:
ref - это текстовая метка на самом деле, и не более того. компилятор inline v по месту использования ref везде, где это возможно. а возможно это везде, где не нужно делать копии. и только там, где невозможно выполнить подстановку, он задействует механизм указателей. например - если нужно сохранить копию ссылки как член класса, или как аргумент функции (и то - не факт, что не сделает inline). К тому же, стандарт никак не оговаривает, как именно закулисами компилятор должен реализовать механизм ссылки. Нигде не сказано, что механизм ссылки должен быть реализован именно через указатель. просто другого способа пока никто ещё не придумал. а так вообще, вопрос на собеседовании: перечислите типы языка с++, которые не могут иметь собственных объектов. Кликните здесь для просмотра всего текста
ссылки и void
1
|
|||||||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 10.03.2015, 13:07 | |
|
Не буду спорить. Поверю на слово. Я ассемблером не владею, чтобы смотреть что где и когда существует.
Но возьмем пример int *N=new int[100]; Давайте узнаем количество элементов в N c помощью sizeof. Оно как бы есть, но мы его увидеть никак не можем., как бы мы ни старались. Существует, достать нельзя.
0
|
|
| 10.03.2015, 13:12 | ||
|
Не по теме:
Мне почему-то сразу вспоминаются школьные "отличники", которые получив "4" начинают заламывать руки, доказывая окружающим всеми правдами и неправдами, что достойны только высшей оценки. Хотя дело всего лишь в том, что никто не идеален. Надеюсь, без обид. :senor:
0
|
||
|
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
|
|||||||||||||
| 10.03.2015, 13:22 | |||||||||||||
Без ассемблера понятно, что занимает место в памяти. Добавишь еще ссылок - стек переполнится быстрее.
1
|
|||||||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||
| 10.03.2015, 13:28 | |||||||||
|
Однако в этой записи тип данных "массив" нигде не фигурирует. Следовательно использовать sizeof здесь уже не получится. В правой части - мы создаем массив объектов в динамической памяти. (Не путать с типом данных "массив" языка!). В левой - указатель, который так же не является массивом. Типа данных "массив" нигде не фигурирует. Единственный честный способ взять количество элементов - использовать расширения вашего компилятора. например так: https://msdn.microsoft.com/ru-... .110).aspx Но если бы вы использовали тип данных "массив", тогда конечно взять размер было бы можно. Не по теме: У меня нет такого рвения. Добавлено через 2 минуты http://rextester.com/TCU56692
а значит вы никак не проверите таким образом свойства ссылок. ----------- насчет количество итераций... нужно смотреть ассм выхлоп.
0
|
|||||||||
|
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
|
||||
| 10.03.2015, 13:30 | ||||
|
Ссылки находятся на стеке, а не "просто текстовые метки" в коде программы. Выше - пример, который это демонстриурет.
0
|
||||
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
||
| 10.03.2015, 13:35 | ||
Более-менее современные компиляторы умеют выполнять оптимизация хвостовой рекурсии, так что получится просто бесконечный цикл
1
|
||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 10.03.2015, 13:37 | |
|
ну, не только с типами. Еще с объектами.(не изменяйте своей категоричности)
0
|
|
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
||
| 10.03.2015, 13:39 | ||
![]() А вообще конечно лол, почитать стандарт языка? Не-е-е, лучше будем делать какие-нибудь сомнительные опыты
1
|
||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||||||||||||
| 10.03.2015, 13:51 | |||||||||||||
|
Добавлено через 5 минут
0
|
|||||||||||||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|||||||
| 10.03.2015, 14:10 | |||||||
|
Коли уж пошла такая пьянка, прошу объяснить
0
|
|||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||||||||
| 10.03.2015, 14:42 | |||||||||||||||||||
Добавлено через 27 минут известный факт: размер любого указателя равен sizeof(void*) что будет если мы возьмем размер объекта указательного типа? int* p = v; std::cout<<"size of p = "<< sizeof(p)<<std::endl; std::cout<<"size of void* = "<< sizeof(void*)<<std::endl; Если бы утверждение: "ссылка - это указатель с авторазыменовыванием" было бы верным, тогда её размер так же был бы равен sizeof(void*) Однако:
все операции над ссылкой есть операции над оригинальным объектом. Мы можем узнать размер обычного сишного массива. А значит можем узнать его и по ссылке. Массивы нельзя передавать в функции по значению. Либо по ссылке, либо по указателю Однако указатель "забывает" на что он на самом деле указывает. А вот ссылка - никогда. На практике это позволяет нам передать массив в функцию, при этом автоматически выводить количество его элементов.
0
|
|||||||||||||||||||
|
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
|
|||||
| 10.03.2015, 14:48 | |||||
|
0
|
|||||
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|
| 10.03.2015, 14:50 | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 10.03.2015, 14:52 | ||
|
поскольку в дебаге компилятор может понапихать любой своей отсибятины из соображений безопасности. и что бы понять что есть что нужно смотреть ассм.
0
|
||
|
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
|
||||
| 10.03.2015, 14:58 | ||||
|
Твой же пример с ссылками:
gDepth = 2487 Без ссылок: gDepth = 4387 Можно что угодно придумывать, но этот пример показывает, что ссылки не просто текстовые метки в коде. Добавлено через 1 минуту Добавлено через 3 минуты
0
|
||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 10.03.2015, 14:58 | ||
|
в том то и дело, что мы не можем закладываться на то, что в итоге сотворит компилятор. ещё раз повторяю: в стандарте нигде не сказано, как именно должен быть реализован механизм ссылки. это означает, что компилятор может сделать как захочется. а в дебаге он может сделать так, а в релизе - эдак. и что это нам даст? НИ-ЧЕ-ГО. ваш эксперимент ничего не показывает. В релизе оно вообще от переполнения стека не падает. И что это значит? Да ничего это не значит, кроме того, что в этом конкретном случае компиль соптимизировал рекурсию.
0
|
||
|
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
|
|
| 10.03.2015, 14:59 | |
|
При оптимизации компилятор может убрать тебе неиспользуемую переменную. Теперь я могу утверждать, что любая переменная не существует в памяти и просто метка текстовая? Логический бред.
0
|
|
| 10.03.2015, 14:59 | |
|
Возврат по ссылке
Наследование, возврат по ссылке.. Возврат результата из функции через параметр по ссылке
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла:
Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
|
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет
Новости компьютерного мира и их обсуждение (4)
Салют, шампанское, овации!
:drink:
|
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр.
Дословно, отклонённая. . .
|
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы
Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
|
|
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
|
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2.
Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|