170 похожих чатов

Дарова всем, интересный вопрос, я почти год изучаю С++, но

впервые слышу про void ссылки ( void* ).
Знаю что в C такое есть, но возможно ли сохранить адрес типа void* в массив например. 0_о
Если можно, то получается любое значение можно положить туда?

34 ответов

18 просмотров

так не принято делать в с++, это как минимум нарушает ооп и крайне не безопасно

Можно спокойно сделать массив типа void*. Это просто указатель без типа данных.

Это обычный указатель, делать с ним можно всё то же, что и с любым указателем.

Андрей Будиловский
причём тут ООП

как соблюсти инкапсуляцию с использованием в методах параметры типа void*?

Aniki Hi$ok@ 🌈 Z 🐀
как соблюсти инкапсуляцию с использованием в метод...

void* не должен торчать наружу, открой реазацию std::variant и узнаешь P.s. или не открой, кароч найди любую реализацию type-erasure с кастомными vtable и узнай

Андрей Будиловский
void* не должен торчать наружу, открой реазацию st...

зачем войд, если можно четко кастовать один тип в другой, промежуточное состояние излишне. Авторам стд можно, они что-то знают

Aniki Hi$ok@ 🌈 Z 🐀
зачем войд, если можно четко кастовать один тип в ...

1) ты знаешь что такое вариант? 2) ты примерно представляешь его реализацию?

Amir-GameDev Автор вопроса
Андрей Будиловский
1) ты знаешь что такое вариант? 2) ты примерно пре...

Тут один мужик в Ютуб сделал следующее: int a = 4; void *pVa = &a; Такое легально?))

Aniki Hi$ok@ 🌈 Z 🐀
без понятия как он устроен 🤝

там лежит void* storage, через шаблонные функции сверяется рантайм параметр, хранящий значение текущего типа, а дальше немного задолбной магии с корректным доставанием значения

Amir-GameDev Автор вопроса

XD ни в одной книге, видео уроков и сайтов не было сказано про это)))

Андрей Будиловский
там лежит void* storage, через шаблонные функции с...

ну, очевидно, потому что все нюансы учтены. А так шаг вправо/шаг влево - уб

Amir GameDev
XD ни в одной книге, видео уроков и сайтов не было...

ты не знаешь что лежит за void*, какой размер у этого объекта, какого он типа, константный ли он. Это просто сырой указатель, считай это та штука которой не должно быть, как и goto

Aniki Hi$ok@ 🌈 Z 🐀
ты не знаешь что лежит за void*, какой размер у эт...

goto не имеет никакого отношения к void*, но и void* ему не нужен

Aniki Hi$ok@ 🌈 Z 🐀
ты не знаешь что лежит за void*, какой размер у эт...

А как же работать с памятью без указателей? Или ты конкретно о указателе на void?

Amir-GameDev Автор вопроса
Дмитрий 🎮
А как же работать с памятью без указателей? Или ты...

Так все указатели толи 4 толи 8 байт занимают не в зависимости от типа, не?

Дмитрий 🎮
А как же работать с памятью без указателей? Или ты...

у указателя есть тип, значит я знаю его размер. Си массивы не использую, только си строки, а у них я так же знаю размер

Amir GameDev
Так все указатели толи 4 толи 8 байт занимают не в...

кароч забудь о существовании void* и большей части ютуба тоже

Amir GameDev
Так все указатели толи 4 толи 8 байт занимают не в...

речь про то, что лежит по этому указателю

Amir GameDev
ахахаха, понял тебя :D

если ты хочешь изучить плюсы, то книжки в закрепе есть нормальные

Amir-GameDev Автор вопроса
Amir GameDev
Благодарю, но у меня накопилось уже... книг :)

Их не нужно копить, их читать нужно, конкретно в случае с теми, которые в закрепе, то там просто считай тоже самое, что и на ютубе, только без херни и в текстовой форме

Это не ссылка. Это указатель. После года обучения как-то печально выглядят твои слова

Ilya Zviagin
Это не ссылка. Это указатель. После года обучения...

Всё же от качества книжек и учебных материалов многое зависит.

Aniki Hi$ok@ 🌈 Z 🐀
как соблюсти инкапсуляцию с использованием в метод...

Можно иметь в наличии функцию кастования к реальному типу . Если честно, я тебя не понял, ответил просто так. Но теперь мне кажется, что ты меня тоже не совсем понял. Вот интересный материал на эту тему https://www.nextptr.com/tutorial/ta1227747841/the-stdshared_ptrvoid-as-arbitrary-userdata-pointer

Aniki Hi$ok@ 🌈 Z 🐀
как соблюсти инкапсуляцию с использованием в метод...

Ты затронул одну очень интересную тему, а именно "нафига нужны типы?" И если ответить честно, большинство типов в принципе нафиг не нужны, но в тоже время очень нужны. Как так??? А вот смотри как. Вот ты хочешь кушать. У тебя есть огород и ты понимаешь, чтобы что то покушать, надо это вырастить. И вот ты покупаешь или берешь в аренду какой то механизм, например, трактор. Так вот трактор это тип в С++ (и микроволновка тоже ). И он как бы тебе вроде бы нужен, но с другой стороны он тебе нафиг не нужен, он только занимает место у тебя на огороде. Твоя конечная цель покушать. А трактор ты используешь лишь временно, как и микроволновку, как и мясорубку лишь для того, чтобы эти механизмы что то переработали (помогли тебе поскорей покушать). То есть типы это всего лишь вспомогательные механизмы, которые ты используешь ВРЕМЕННО, они нужны лишь иногда, но сами по себе они нафиг не нужны. Ты не будешь есть ни трактор ни микроволновку. Ты будешь есть картофельную котлету. Для этого ты и использовал трактор, чтоб вспахать землю, мясорубку, чтоб измельчить клубни, печку чтоб это приготовить. Так же и в ООП программировании - типы как бы и нужны и в тоже время они нафиг не нужны. Потому что они нужны лишь временно. А конечная цель это приготовленная для тебя еда. (приготовленные для употребления данные, например, матрица для видеокарты, которую она кушает).

Amir GameDev
Так все указатели толи 4 толи 8 байт занимают не в...

указатель на любой тип имеет размер в зависимости от целевой архитектуры. целевая архитектура это тот проц на котором будет исполняться твоя прога. х86 32 битный - значит 4 байта. х86_64 значит 8 байт

The Pressbraker
Ты затронул одну очень интересную тему, а именно "...

ты покупаешь трактор, а не void. У трактора есть кресло и руль, колёса, ты также знаешь какого размера тебе нужен гараж. Если бы на заводе продавали void, а не класс трактора, то ты бы умер от голода

Похожие вопросы

Обсуждают сегодня

Гайз, кто-нибудь пробовал запустить probe-rs под камень, которого нет в probe-rs? Мб есть какой-нибудь пример у кого... Через target-gen попробовал сгенерировать chip-descript...
Максим Смирнов
1
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Заметил в ghci 9.4.8: > :t (<*>) @((->)_) (<*>) @((->)_) :: (w -> (a -> b)) -> (w -> a) -> w -> b Разве не должно (w -> (a -> b)) быть записано как (w -> a -> b)? Это баг, ил...
Михаил
13
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Any electron dev here?
Sayanth Tezro
12
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
так это может кто что знает или использует что-то как макбук только не макбук? на 13…14 дюймов
Michael
9
Карта сайта