|
2 / 2 / 0
Регистрация: 24.11.2016
Сообщений: 77
|
|
Указатели и ссылки: в чем разница08.07.2017, 18:55. Показов 12817. Ответов 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++
Указатели и ссылки Ссылки и указатели Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки.
Добавлены следующие реквизиты типа Булево:
- Буквы;
- Цифры;
- Символы.
Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
|
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей.
Самым главным критерием для. . .
|
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store.
И так:
1. Скачиваем с. . .
|