впервые слышу про void ссылки ( void* ).
Знаю что в C такое есть, но возможно ли сохранить адрес типа void* в массив например. 0_о
Если можно, то получается любое значение можно положить туда?
так не принято делать в с++, это как минимум нарушает ооп и крайне не безопасно
Можно спокойно сделать массив типа void*. Это просто указатель без типа данных.
Это обычный указатель, делать с ним можно всё то же, что и с любым указателем.
как соблюсти инкапсуляцию с использованием в методах параметры типа void*?
void* не должен торчать наружу, открой реазацию std::variant и узнаешь P.s. или не открой, кароч найди любую реализацию type-erasure с кастомными vtable и узнай
зачем войд, если можно четко кастовать один тип в другой, промежуточное состояние излишне. Авторам стд можно, они что-то знают
1) ты знаешь что такое вариант? 2) ты примерно представляешь его реализацию?
без понятия как он устроен 🤝
Тут один мужик в Ютуб сделал следующее: int a = 4; void *pVa = &a; Такое легально?))
Легально, но это вам ни к чему
там лежит void* storage, через шаблонные функции сверяется рантайм параметр, хранящий значение текущего типа, а дальше немного задолбной магии с корректным доставанием значения
XD ни в одной книге, видео уроков и сайтов не было сказано про это)))
ну, очевидно, потому что все нюансы учтены. А так шаг вправо/шаг влево - уб
ты не знаешь что лежит за void*, какой размер у этого объекта, какого он типа, константный ли он. Это просто сырой указатель, считай это та штука которой не должно быть, как и goto
goto не имеет никакого отношения к void*, но и void* ему не нужен
А как же работать с памятью без указателей? Или ты конкретно о указателе на void?
Так все указатели толи 4 толи 8 байт занимают не в зависимости от типа, не?
у указателя есть тип, значит я знаю его размер. Си массивы не использую, только си строки, а у них я так же знаю размер
кароч забудь о существовании void* и большей части ютуба тоже
ахахаха, понял тебя :D
речь про то, что лежит по этому указателю
если ты хочешь изучить плюсы, то книжки в закрепе есть нормальные
Благодарю, но у меня накопилось уже... книг :)
Их не нужно копить, их читать нужно, конкретно в случае с теми, которые в закрепе, то там просто считай тоже самое, что и на ютубе, только без херни и в текстовой форме
Посмотрю как нибудь)
Это не ссылка. Это указатель. После года обучения как-то печально выглядят твои слова
Всё же от качества книжек и учебных материалов многое зависит.
Можно иметь в наличии функцию кастования к реальному типу . Если честно, я тебя не понял, ответил просто так. Но теперь мне кажется, что ты меня тоже не совсем понял. Вот интересный материал на эту тему https://www.nextptr.com/tutorial/ta1227747841/the-stdshared_ptrvoid-as-arbitrary-userdata-pointer
Ты затронул одну очень интересную тему, а именно "нафига нужны типы?" И если ответить честно, большинство типов в принципе нафиг не нужны, но в тоже время очень нужны. Как так??? А вот смотри как. Вот ты хочешь кушать. У тебя есть огород и ты понимаешь, чтобы что то покушать, надо это вырастить. И вот ты покупаешь или берешь в аренду какой то механизм, например, трактор. Так вот трактор это тип в С++ (и микроволновка тоже ). И он как бы тебе вроде бы нужен, но с другой стороны он тебе нафиг не нужен, он только занимает место у тебя на огороде. Твоя конечная цель покушать. А трактор ты используешь лишь временно, как и микроволновку, как и мясорубку лишь для того, чтобы эти механизмы что то переработали (помогли тебе поскорей покушать). То есть типы это всего лишь вспомогательные механизмы, которые ты используешь ВРЕМЕННО, они нужны лишь иногда, но сами по себе они нафиг не нужны. Ты не будешь есть ни трактор ни микроволновку. Ты будешь есть картофельную котлету. Для этого ты и использовал трактор, чтоб вспахать землю, мясорубку, чтоб измельчить клубни, печку чтоб это приготовить. Так же и в ООП программировании - типы как бы и нужны и в тоже время они нафиг не нужны. Потому что они нужны лишь временно. А конечная цель это приготовленная для тебя еда. (приготовленные для употребления данные, например, матрица для видеокарты, которую она кушает).
указатель на любой тип имеет размер в зависимости от целевой архитектуры. целевая архитектура это тот проц на котором будет исполняться твоя прога. х86 32 битный - значит 4 байта. х86_64 значит 8 байт
ты покупаешь трактор, а не void. У трактора есть кресло и руль, колёса, ты также знаешь какого размера тебе нужен гараж. Если бы на заводе продавали void, а не класс трактора, то ты бы умер от голода
Обсуждают сегодня