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

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

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

34 ответов

43 просмотра

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

Можно спокойно сделать массив типа 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
ахахаха, понял тебя :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, а не класс трактора, то ты бы умер от голода

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта