|
-2 / 8 / 2
Регистрация: 10.11.2008
Сообщений: 776
|
|
Размер указателя25.04.2016, 18:36. Показов 16915. Ответов 75
Метки нет (Все метки)
sizeof(void*);// Размер указателя на любой тип равен 8, почему так много? И можно ли как-нибудь узнать сколько под указатель выделено памяти не смотря в исходники?
0
|
|
| 25.04.2016, 18:36 | |
|
Ответы с готовыми решениями:
75
Размер строки указателя Размер указателя short int Размер указателя на разные типы данных |
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 29.04.2016, 16:27 | ||
|
При этом нужно все это лишь там, где программист откатывается на уровень Си и начинает тамогочить на низком уровне все и вся, осторожно огибая сопутствующие грабли. Конкретно в этой ситуации никакой проблемы с новым кейвордом не вижу. А сишники, кстати, не видят проблемы и с конструкциями вида struct MyStruct*value (без struct не компилируется) или (void)value; (вместо использования безымянных аргументов функции). Хотя, это уже их личные сексуальные извращения, в плюсах удаленные.
0
|
||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||||
| 29.04.2016, 17:12 | ||||
|
Добавлено через 26 минут Т.к. тема пошла по кругу сформулирую вопрос. Например, я использую указатель на класс и указатель на функцию член как делегат. Зачем требовать какую-то дополнительную информацию о делегате (ваше ключевое слово), если по логике класс о делегате должен знать как можно меньше?
0
|
||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||||
| 29.04.2016, 17:27 | ||||
|
0
|
||||
|
Ушел с форума
|
||
| 09.05.2016, 10:05 | ||
|
т.е. 4 байта в x86 и 8 байт в x64.
0
|
||
|
Вездепух
13234 / 6866 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
||
| 09.05.2016, 10:09 | ||
|
0
|
||
|
Ушел с форума
|
|
| 09.05.2016, 11:37 | |
|
0
|
|
|
Вездепух
13234 / 6866 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
||||||||||||
| 09.05.2016, 18:14 | ||||||||||||
|
У меня уже нет под руками более старых версий VS, только 2015. VS2015 уже перестал агресcивно уменьшать указатели, и на каждую попытку создать ошибочный пример либо строит большой указатель, либо выдает сообщение об ошибке Например
static_cast.А в VS2008 такой пример скорее всего скомпилируется (нет возможности попробовать) со всеми вытекающими.
1
|
||||||||||||
|
Комп_Оратор)
|
|||||||
| 09.05.2016, 18:42 | |||||||
|
но с конструктором инициализирующим a всё скомпилировалось и работает:
0
|
|||||||
|
Вездепух
13234 / 6866 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
||
| 09.05.2016, 19:18 | ||
|
0
|
||
|
Вездепух
13234 / 6866 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
||
| 09.05.2016, 21:21 | ||
D::bar() получил неправильный указатель this. А это уже может привести к чему угодно.И непонятно, о какой логической ошибке идет речь. С точки зрения языка ошибка здесь - в компиляторе. Это "логическая"?
0
|
||
|
Комп_Оратор)
|
||||||
| 09.05.2016, 22:11 | ||||||
|
Я не уверен как это всё высказать, но если это можно высказать, то я бы так попробовал:
0
|
||||||
|
Вездепух
13234 / 6866 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
||||||||
| 09.05.2016, 22:46 | ||||||||
|
На самом деле ваш вариант с
int (S::*)() и типом метода. Выражение &D::foo тоже имеет тип int (S::*)() и, поэтому, static_cast тут уже совершенно не нужен. Такой вариант может/будет работать даже с неправильным "урезанным" указателем на метод, т.е. этот вариант - совершено непоказателен. К чему он тут?(И к чему тут пример с reinterpret_cast - мне тоже не ясно.)
1
|
||||||||
|
Комп_Оратор)
|
||
| 10.05.2016, 00:16 | ||
|
А попытка вызвать метод по указателю от одного класса на экземпляре другого, это ещё один "легальный" момент? У меня маловато опыта, чтобы высказаться определённо. Мне это представляется нелегальным кодом. Если компилятор неправ в том, что он это компилирует, то можно добавить ещё 100500 вариантов которые компиляторы C++ компилируют и которые являются UB. Это плата за близость к телу твердого и мягкого вейера. Или я не понял о чем речь.
0
|
||
|
Вездепух
13234 / 6866 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
||||||||
| 10.05.2016, 01:42 | ||||||||
|
Легального тут то, что стандарт языка С++ не требует и никогда и не требовал того, чтобы в момент инициализации указателя типа int (S::*)() этот указатель указывал на что-то, присутствующее именно в классе S. Вы можете заставить указатель int (S::*)() указывать на член класса-потомка. Ясно, что такая инициализация таит в себе определенную опасность, по каковой причине она требует выполнения явного static_cast (заметьте - static_cast, а не reinterpret_cast). Тем не менее такое преобразование является частью функциональности static_cast и ничего нелегального в ней нет.Требование наличия члена в классе в языке С++ перенесено на более поздний момент: момент разадресования указателя, т.е. выполнения операторов .* и ->*. Именно в этот момент требуется, чтобы динамический тип объекта, указанный слева от .* и ->*, содержал указуемый член класса. Проверка такого требования, понятное дело, не может быть выполнена на этапе компиляции, поэтому следить за его соблюдением - это обязанность программиста. Нарушение его - UB. В моем примере это требование соблюдается, поэтому ничего нелегального в моем примере нет. Именно это открытым текстом сказано в Note в спецификации static_cast (5.2.9/12)
И именно благодаря этой возможности можно, как я говорил раньше, использовать указатели на члены для "ручной" реализации некоторого подобия виртуальных функций
S мог указывать только на то, что явно есть в S. Однако в последний момент эта функциональность была изменена и включена в чистовой вариант стандарта C++98: появилась возможность делать "опасный" static_cast, а требование наличия указуемого члена в классе переехало в спецификацию операторов .* и ->*.
5
|
||||||||
|
Ушел с форума
|
|||
| 10.05.2016, 08:22 | |||
|
У меня VC2008 и VS2015 ведут себя одинаково (для VC2008 я только перенес инициализацию 'a' в конструктор):
"cast between different pointer to member representations, compiler may generate incorrect code" на строчке, где static_cast.
1
|
|||
| 10.05.2016, 08:22 | |
|
Как верно узнать размер указателя ?
Создание указателя на экземпляр класса, описанного после объявления указателя Преобразование кода без указателя в код с использованием указателя Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|