|
1 / 1 / 0
Регистрация: 17.04.2018
Сообщений: 26
|
|||||||||||
Проблемы с указателями31.05.2022, 02:03. Показов 6260. Ответов 64
Есть вот такой код:
2) Почему не получается складывать p2 и p1? При сложении у меня выходит ошибка, а при вычитании все в порядке. 3) И что еще я не могу понять, так это почему при выражении p1 - p2 выходит отрицательное число? Для меня в теме указателей это 3 не понятных момента. В особенности я не пойму почему мы не разыменовываем все это. Как при таком подходе получается целое число а не 16-тиричное число? Вот например есть код.
0
|
|||||||||||
| 31.05.2022, 02:03 | |
|
Ответы с готовыми решениями:
64
Проблемы с указателями Новая видеокарта, новые проблемы №2. Проблемы с вводом и выводом звуков |
|
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
|
|
| 31.05.2022, 22:28 | |
|
Dante20171, головоломки любите?
int i = Sizeof('X')["why not"+3]; Добавлено через 23 минуты По поводу ++х l-value: это решил ещё Andy Koenig, для с++98. Причина - чтобы результат присваивания можно было передавать по НЕ-const ссылке. Поскольку ++х является результатом присваивания, он должен быть l-value Позже это помогло с итераторами.
0
|
|
|
1 / 1 / 0
Регистрация: 17.04.2018
Сообщений: 26
|
||
| 01.06.2022, 01:54 [ТС] | ||
|
0
|
||
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
|||||||
| 01.06.2022, 05:19 | |||||||
Sizeof? В этом и заключается головоломка?Добавлено через 32 минуты Указатели и адреса - это ординалные величины, по каковой причине складывать их никакого смысла нет. Добавлено через 1 минуту
0
|
|||||||
|
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
|
|
| 01.06.2022, 06:49 | |
|
TheCalligrapher, посмотрите тут например
https://stackoverflow.com/ques... rns-an-lva Насколько я вижу, это обсуждалось и возможность передать по не-конст считалась важной. Теперь можно что-то вроде (cmyout = cout) << "hello world\n"; написать, или (++p)->reset(); или delete &++x;
0
|
|
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
||||
| 01.06.2022, 07:29 | ||||
|
0
|
||||
|
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
|
|
| 01.06.2022, 08:15 | |
|
TheCalligrapher, вы думаете интегральными типами, или объектами с++?
Я привел примеры где перегруженные друг-функции (у которых первый параметр type&) могут использовать ++х, когда тот l-value. Для встроенных это вряд ли полезно Добавлено через 20 минут > delete - это константная операция Почему вы так думаете? Ее вызов приводит к разрушению объекта, константные операции не изменяют свойства объекта. Delete (const type*)(new type); > delete на именнованный объект - странная затея. Отнюдь. Когда параметр подаётся как не-const reference, т.е. часто Мы как раз про это и разговариваем.
0
|
|
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
|||||||||||||||
| 01.06.2022, 09:50 | |||||||||||||||
delete - особая операция. Константность в С++ не предполагает неуничтожимосить
delete принимает указатель по значению. Ей все равно, является ли параметр reference или нет.И, еще раз, я не могу себе представить (кроме искусственных извращений), где delete было бы осмысленно применять для уничтожения именованного объекта. То есть delete &x оправданно разве что в
0
|
|||||||||||||||
|
12 / 10 / 2
Регистрация: 24.05.2022
Сообщений: 115
|
|
| 01.06.2022, 10:26 | |
|
Учились Маша и Петя в Универе, Маша и Петя были очень умными учениками, но Петя был лентяй и иногда прогуливал лекции. И вот пришло время экзамена, Маша справилось со своим задание и получила пятерку. Петя тоже сделал свое задание на отлично, но препод отказывался ему ставить 5, он же прогульщик и лентяй, но Петя все унимался и требовал поставить ему пятёрку. Когда препод разозлился, он решил наказать Петю задав ему решить одну формулу.
Когда Маша увидела эту формулу, она улыбнулась и ушла, она же поняла, что эту формулу не имеет решения, т.к. это было аж целое занятие посвящено этой формуле, а Петя как раз прогулял этот день и не знал, что это не возможно решить. И вот Петя садится за стол и пытается ее решить, проходит час, два, три, четыре. Уже остался последний ученик на экзамене. И тут Петя начинает улыбаться во все свои 32. Отдает решение преподавателю у которого, глаза стали по 5 копеек. Он начинает лепетать. - этого не возможно, это не возможно. Тут Петя спрашивает. - что не возможно? - это не возможно было решить!!! Ответ Пети. - Простите я этого не знал.
0
|
|
|
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
|
||
| 01.06.2022, 16:42 | ||
|
TheCalligrapher, лучше наверное посмотрите по ссылке, может их примеры вам больше понравятся.
Bjorn Stroustrup и его коллеги ещё живы, можете написать и напрямик и спросить что они думали.
Я считаю что: - delete не является const функцией. Т.к. она разрушает объект и ее параметр задекларирован как "void *", а не "const void *" - константные объекты нет возможности уничтожать через delete. Тут важно понимать что const указатель на объект не делает сам объект const, только интерфейс к нему через этот указатель. Мы отошли от вопроса ТС, но поскольку обсуждаем указатели предлагаю не считать офтопом,особенно если другим интересно.
0
|
||
|
531 / 180 / 39
Регистрация: 18.08.2012
Сообщений: 907
|
|
| 01.06.2022, 18:24 | |
|
Складывать 2 указателя нельзя по той причине, что это:
сам компилятор, при включенной оптимизации запросто складывает 2 указателя. Таким образом, правила о запрете сложения двух указателей - касаются/распространяются только на программиста.
0
|
|
| 01.06.2022, 18:29 | |
|
0
|
|
|
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
|
|
| 01.06.2022, 18:35 | |
|
Лол, да я увлекся с примерами. Главное чтобы суть была понятна.
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||
| 01.06.2022, 20:54 | |||||
operator delete, а не у delete. Вот operator delete как раз функция.Но к ней дело переходит уже после разрушения объекта, т.е. operator delete вообще не имеет дела с объектами, а только с памятью. Константный объект был или нет, память тут (уже) не при чем, поэтому там и нет const void*.В общем, насчет константности delete, я думаю, все еще можно поспорить, но не с такими аргументами как у вас.
0
|
|||||
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
||||
| 01.06.2022, 21:21 | ||||
|
Точно так же в конструкторе и деструкторе константного объекта этот объект виден, как неконстантный - это пример того же самого концептуального деления. Другими словами, константность начинается после создания и завершается перед уничтожением. Во-вторых, о какой "функции delete" вы вообще ведете речь? Какой void *? delete - это оператор языка, а никакая не функция. Никакого void * она не принимает. void * там даже близко нет. О чем вы?
0
|
||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 01.06.2022, 21:59 | |||||||
|
оператор работает с памятью, когда объект уже разрушен. а вот выражение delete сначала вызывает деструктор, и только после этого освобождает память. время жизни объекта завершается по факту завершения работы его деструктора. таким образом, рассуждая в твоих категориях, получается, что объект разрушает "функция деструктора", а вовсе не "функция delete" а во-вторых: на этапе работы конструктора или деструктора, понятия "константности *this" не существует. поэтому, следующий код успешно компилируется:
0
|
|||||||
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
||||||
| 01.06.2022, 22:28 | ||||||
|
Не могу пройти мимо и не запостить самый популярный, на мой взгляд, косяк в геймдеве -- освобождение памяти чужого объекта.
Причём работает, даже если он константный по самое ненадейся. Синтетический пример:
Мораль 2: создал -- не забудь удалить. не создавал -- не удаляй.
0
|
||||||
|
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
|
||||||
| 01.06.2022, 22:37 | ||||||
|
TheCalligrapher, hoggy, я заблуждался насчёт delete.
Для него действительно сделали исключение в стандарте с++ как минимум 20 лет назад. Msvc и с++ от борланда (тогда) запрещали delete константных указателей, что логично для их девелопера и для меня, но стандарт есть стандарт. Мой g++ правильно следует стандарту, из-за чего возможны глупости вроде
Это неудачное решение, позволить прятать удаление объектов внутри функций задекларированеых "сонст". Наверное, была всякая причина.
0
|
||||||
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
|||
| 01.06.2022, 22:55 | |||
delete к неправильным указателям имеет к теме константности??? Все ваши "глупости" можно прекрасно стопроцентно воспроизвести и без константности. То есть константность к вашим примерам никакого отношения не имеет вообще.
0
|
|||
|
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
|
|
| 02.06.2022, 06:17 | |
|
TheCalligrapher, > Ничего не понял.
Я могу объяснить более подробно. Добавлено через 4 часа 36 минут Забавно: E2158 Operand of 'delete' must be non-const pointer (C++) Добавлено через 12 минут Курьезно: Error message in Visual C++ when you delete a pointer to a const object
0
|
|
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
||
| 02.06.2022, 06:34 | ||
|
0
|
||
| 02.06.2022, 06:34 | |
|
Проблемы с инетом, не отправляется почта, проблемы со связью с другой организацией Yokogawa, шкаф, проблемы с драйвером на станции, проблемы соединения Непонятка с указателями Работа с указателями Массивы с указателями Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 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
Однажды один участник в своём блоге, на этом форуме, сделал запись "О языках замолвите слово". Понимая, что язык - важная вещь, я решил хорошо подумать, прежде чем сказать, и сказал то, что вы видите. . .
|