|
2 / 2 / 0
Регистрация: 24.11.2016
Сообщений: 77
|
|
Указатели и ссылки: в чем разница08.07.2017, 18:55. Показов 12359. Ответов 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++
Указатели и ссылки Ссылки и указатели Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 29)
anaschu 23.06.2026
Многофункциональное здание:
как одно здание порождает конфликты требований,
которые никто не планировал
Материалы для обсуждения с МГСУ · 2026
Рисунки внутри приложенного ворд файла.
Что за. . .
|
28. Конкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования?
Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная.
Где разрыв
. . .
|
27. Планы на разработку функциональных требований к строительству внутри модели пищеблока (или не только его?)
anaschu 22.06.2026
Что уже реализовано и даёт конфликты «бесплатно»
Самый простой конфликт уже работает — конфликт за ресурс-работника. Заданий больше, чем доступных поваров → очередь в queue1. Это прямое отражение. . .
|
26. мед мат модель.Какие типы конфликтов функциональных требований можно рассчитать через ДЕС-моделирование (СМО) в AnyLogic?
anaschu 22.06.2026
Что ДЕС/ СМО умеет считать напрямую:
Конфликты за ресурсы (очереди, узкие места). Несколько типов агентов (повара, учителя, рабочие, пациенты) претендуют на один ресурс (лифт, вход, коридор,. . .
|
|
25 модель здравосохранения и функциональных требований к пищеблоку: конфликты функциональных требований.
anaschu 22.06.2026
Есть ли данные о том, какие функциональные/ эксплуатационные требования или их сочетания труднее всего учитывать при проектировании зданий?
Да, такие данные есть, и они хорошо описаны и в российской,. . .
|
Remote Connection Manager
DevAlt 21.06.2026
Написал для себя небольшую прилагу:
https:/ / github. com/ altbodhi/ ReConMan
По итогу пришел к мысли, что DU не дружат с существующими технологиями.
От сериализации до отображения в реляционную. . .
|
Администрация Хабра удаляет новые энергоэфективные алгоритмы, которые не западной школы кода, и вовсе никак не сгенерированы
Hrethgir 20.06.2026
Делается это, как замечено, при правках - при объявлении концептуальных отличий в алгоримах. Делается это, по линейке событий - после дополнения публикации основными отличиями от основных западных. . .
|
Процесс ориентированная диалектика (не новость - просто системное обновление, философия).
Hrethgir 20.06.2026
Однажды один участник в своём блоге, на этом форуме, сделал запись "О языках замолвите слово". Понимая, что язык - важная вещь, я решил хорошо подумать, прежде чем сказать, и сказал то, что вы видите. . .
|