|
2 / 2 / 0
Регистрация: 24.11.2016
Сообщений: 77
|
|
Указатели и ссылки: в чем разница08.07.2017, 18:55. Показов 12543. Ответов 85
Метки нет (Все метки)
0
|
|
| 08.07.2017, 18:55 | |
|
Ответы с готовыми решениями:
85
Ссылки vs указатели - в чем разница?
в чем разница? массивы и указатели строк |
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
| 10.07.2017, 01:53 | ||||||
|
тот факт, что компилятор не обязан вызывать функцию по факту - монопенисуальный фактор. к тому же, можно убрать decltype, если он вас так смущает. будет вполне себе well-formed, пока кто нибудь не попытается прочитать значение переданного аргумента. честным образом покласть аргументы на стек. причем ссылка идет указателем. отсюда интересный вопрос: сможет ли кто нибудь привести реальный пример, который бы проиллюстрировал UB в действии, после перенацеливания ссылки элипсисом? хз, зачем такое могло бы понадобиться на практике. но есть предположение, что способ вполне себе безопасный. Добавлено через 1 минуту
0
|
||||||
|
Заблокирован
|
||||
| 10.07.2017, 01:57 | ||||
Ты про любую функцию без аргументов, возвращающую ссылку, думаешь, что она возвращает нулевую ссылку?
0
|
||||
|
Неэпический
|
||||||
| 10.07.2017, 02:04 | ||||||
|
hoggy, declval возвращает какую-то ссылку, а не нулевую.
Используется в контексте вывода типа. Для вычисляемогг контекста это как:
1
|
||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||
| 10.07.2017, 02:16 | ||||
|
повыпиливав всякие static_assert на использование. и все сразу станет well-formed но не пытается её читать.
0
|
||||
|
Неэпический
|
|||||||
| 10.07.2017, 02:20 | |||||||
|
hoggy, предлагаю другой способ переназначения ссылки.
Берем один файл и делаем там пустую структуру и функцию main, выводящую размер этой структуры. Собираем, запускаем, смотрим - размер 1 байт. Далее берем другой файл, делаем структуру с одной ссылкой. Функцию main оставляем такой же. Собираем. Затем, подменяем собранный нами бинарник тем, который собирали до этого, запускаем - размер структуры - 1 байт. Вывод? Ссылка не занимает места, переназначить её нельзя. PROFIT. Вот как-то так эти способы Ваши выглядят. Добавлено через 3 минуты
0
|
|||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||
| 10.07.2017, 02:24 | ||||||||
|
и нужна что бы в компалтайме поиметь объект якобы построенный с аргументами, забив на конструкторы этих самых аргументов, например.
Добавлено через 3 минуты которая принимает на вход ссылку и адрес нового объекта. а на выходе имеем ссылку, перенацеленную на новый объект. без всяких там подмен бинарников непонятно зачем. способ не зависит от оптимизаций (хотя наверное может бомбануть на однофайловом проекте. нужно тестить)
0
|
||||||||
|
Неэпический
|
|
| 10.07.2017, 02:27 | |
|
hoggy, мы прекрасно знаем чем она может быть.
Использование её в вычисляемом контексте делает программу ill-formed. Её аналог я привел - получите ошибку при использовании в вычисляемом контексте. Если бы её можно было использовать в вычисляемом контексте, то там бы был return, в котором мы должны были бы вернуть ссылку на какой-то объект. Создать null reference в well-formed программе нельзя по причине того, что для этого придется разыменовать нулевой указатель, о чем прямым текстом написано в стандарте. Добавлено через 56 секунд hoggy, обсуждать способы с UB - бессмысленно.
1
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 10.07.2017, 02:28 | |||||||
0
|
|||||||
|
Неэпический
|
|
| 10.07.2017, 02:45 | |
|
Обсуждать способы с UB - бессмысленно. Зачем Вы пишите эту ахинею?
![]() Добавлено через 1 минуту hoggy, у Вас на практике получилась не well-defined программа, содержащая UB. ![]() Не вижу смысла её обсуждать. Ну ишпользовал и ишпользовал. Некоторые union используют для интерпретации памяти. Работает же, хоть и UB. Добавлено через 15 минут https://stackoverflow.com/ques... e-possible
0
|
|
|
Заблокирован
|
||
| 10.07.2017, 06:16 | ||
|
Добавлено через 1 час 18 минут Ну может не просто вызов, а попытка использовать результат вызова.
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||||||||||||||||
| 10.07.2017, 11:45 | |||||||||||||||||||||||||||
|
но если так - тогда "ахинея" это то, что в данный момент постулирует стандарт с++. и что касается UB - все далеко не так однозначно. в стандарте есть один весьма скользкий момент. который стоит того, что бы рассмотреть его более пристально. и тогда то, что вы называете UB внезапно окажется не UB рассмотрим простейший пример:
очевидно, что нет. нулевой указатель вообще не имеет никакого отношения к вызову функции. идем дальше:
статическая функция член вообще ничем не отличается от обычной сишной, просто объявлена она в простанстве имени класса. указатель на объект класса ей не нужен, и никак не используется. компилятор сгенерирует код вызова так, словно это самая обычная сишная функция из первого кейса вот теперь мы начиначаем подходить к более интересным моментам:
здравый смысл подсказывает: код по сути вообще ничем не отличается от второго кейса. более того, здесь так же, как и для второго кейса, компилятор будет вынужден сгенерировать код вызова обычной функции-член, которая так же, как и во втором кейсе не будет содержать никаких зависимостей от указателя. по другому и быть не может. статическая функция член должна быть вызвана. и указатель для этого не нужен. вообще сам указатель p в данном кейсе используется лишь для того, что бы компилятор смог определить какую именно функцию-член нужно вызвать. далее компилятор видет статическую функцию-член, и указатель ему уже становится не нужным. однако! стандарт говорит: доступ по указателю через стрелочку эквивалентен доступу по ссылке:
теперь внимание вопрос: что именно подразумеват стандарт под "разыменовыванием указателя"? доступ к данным через ссылку? или сам факт построения безымянной ссылки на основе указателя? ВАЖНО: если первое - это разумно и логично, но тогда третий кейс так же, как и два первых не содержит никаких UB и сама по себе операция разыменовывания: *p UB не является.если второе - то мы имеем дело с фактом наличия UB, невзирая на unevaluated context в действительности:
пришло время определяться: что есть UB - попытка чтитать/писать нулевую ссылку или сам факт наличия синтаксической записи - разыменовывание нулевого указателя? в первом случае все логично, разумно, подтверждается практикой. но из этого прямо вытекает: создавать нулевые ссылки можно. пока кто нибудь не попытается писать/читать. а вот вывести typeid где нибудь в шаблонах переданной в аргументах ссылки - почему бы и нет? все законно. во втором случае получаем нерациональный, не логичный, противоречащий всякому здравому смыслу, и не имеющий подтверждений на практике дизайн, который до кучи вертел все эти ваши unevaluated контексты подводя под UB лютый пласт шаблонно-мета-программинга. резюмируя: строго говоря, стандарт никогда не отличался особой точностью своих формулировок. взять те же самые "точки следования" которые благодаря туманным формулировкам породили не только в среде программистов-пользователей, но и среди самих комитетчиков. что в итоге привело к дополнительным правкам начиная с с++11 я считаю, что ситуация с разыменовыванием нулевого указателя - аналогичная. двусмысленной форумулировки.
0
|
|||||||||||||||||||||||||||
| 10.07.2017, 13:02 | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||
| 10.07.2017, 13:14 | ||||
|
согласно правилам языка - ничем. своим "является-является" вы только что вступили в противоречие стандарту по некоторым пунктам, со здравым смыслом, и реальной практикой.
0
|
||||
|
Заблокирован
|
|
| 10.07.2017, 18:31 | |
|
1
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 10.07.2017, 18:58 | ||
|
что это такое, и с чем их едят. тогда может быть до вас допрет, почему без чтения/записи ссылка - не более чем синтаксический мусор в исходнике. и не является вычисляемым выражением.
0
|
||
|
Заблокирован
|
||
| 10.07.2017, 19:05 | ||
|
hoggy, является context unevaluated или нет определяется не тем, имеет ли выражение эффекты. Лол.
Добавлено через 2 минуты
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 10.07.2017, 19:21 | |||
|
вам по прежнему стоит подучить раздел "ссылки". а заодно определиться с понятиями unevaluated/evaluate контексты. дабы не лажать по поводу #54
0
|
|||
|
Заблокирован
|
|||||
| 10.07.2017, 19:31 | |||||
|
0
|
|||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
| 10.07.2017, 19:47 | ||||||
|
отсутствие аргументации. (см #54) я могу вам помочь решить эту проблему, если хотите. для этого вам нужно своими собственными словами рассказать, как именно вы понимаете понятия unevaluated/evaluate контексты, и в чем между ними различия. затем мы примерим это платье на понятие ссылки. и вуаля. или приносили клятвы.
0
|
||||||
|
Заблокирован
|
|
| 10.07.2017, 19:53 | |
|
0
|
|
| 10.07.2017, 19:53 | |
|
Указатели и ссылки c++
Указатели и ссылки Ссылки и указатели Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
|